summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBruce Momjian2002-04-05 11:58:24 +0000
committerBruce Momjian2002-04-05 11:58:24 +0000
commit0e0a1be742b9f135bc48ea166cbb1693bed435e9 (patch)
treeee9448ec681d2979b980cc975bf32ffe38841f46
parent7df9954cddf593b749f644e3c6241d6e8edf0b92 (diff)
This patch adds a missing heap_freetuple() to renamerel(), documents
the decision not to make renamerel() update the sequence name that is stored within sequences themselves (thanks to Tom Lane), and adds some rudimentary regression tests for ALTER TABLE ... RENAME on non-table relations. Neil Conway
-rw-r--r--src/backend/commands/rename.c7
-rw-r--r--src/test/regress/expected/alter_table.out29
-rw-r--r--src/test/regress/sql/alter_table.sql16
3 files changed, 52 insertions, 0 deletions
diff --git a/src/backend/commands/rename.c b/src/backend/commands/rename.c
index 04350682ea..019f7d169d 100644
--- a/src/backend/commands/rename.c
+++ b/src/backend/commands/rename.c
@@ -248,6 +248,12 @@ renameatt(Oid relid,
/*
* renamerel - change the name of a relation
+ *
+ * XXX - When renaming sequences, we don't bother to modify the
+ * sequence name that is stored within the sequence itself
+ * (this would cause problems with MVCC). In the future,
+ * the sequence name should probably be removed from the
+ * sequence, AFAIK there's no need for it to be there.
*/
void
renamerel(Oid relid, const char *newrelname)
@@ -312,6 +318,7 @@ renamerel(Oid relid, const char *newrelname)
CatalogCloseIndices(Num_pg_class_indices, irelations);
heap_close(relrelation, NoLock);
+ heap_freetuple(reltup);
/*
* Also rename the associated type, if any.
diff --git a/src/test/regress/expected/alter_table.out b/src/test/regress/expected/alter_table.out
index 6e83edd65c..5d7934fa91 100644
--- a/src/test/regress/expected/alter_table.out
+++ b/src/test/regress/expected/alter_table.out
@@ -267,6 +267,35 @@ SELECT unique1 FROM tenk1 WHERE unique1 < 5;
4
(5 rows)
+-- ALTER TABLE ... RENAME on non-table relations
+-- renaming indexes (FIXME: this should probably test the index's functionality)
+ALTER TABLE onek_unique1 RENAME TO tmp_onek_unique1;
+ALTER TABLE tmp_onek_unique1 RENAME TO onek_unique1;
+-- renaming views
+CREATE VIEW tmp_view (unique1) AS SELECT unique1 FROM tenk1;
+ALTER TABLE tmp_view RENAME TO tmp_view_new;
+-- 5 values, sorted
+SELECT unique1 FROM tenk1 WHERE unique1 < 5;
+ unique1
+---------
+ 0
+ 1
+ 2
+ 3
+ 4
+(5 rows)
+
+DROP VIEW tmp_view_new;
+-- renaming sequences
+CREATE SEQUENCE foo_seq;
+ALTER TABLE foo_seq RENAME TO foo_seq_new;
+SELECT * FROM foo_seq_new;
+ sequence_name | last_value | increment_by | max_value | min_value | cache_value | log_cnt | is_cycled | is_called
+---------------+------------+--------------+---------------------+-----------+-------------+---------+-----------+-----------
+ foo_seq | 1 | 1 | 9223372036854775807 | 1 | 1 | 1 | f | f
+ (1 row)
+
+DROP SEQUENCE foo_seq_new;
-- FOREIGN KEY CONSTRAINT adding TEST
CREATE TABLE tmp2 (a int primary key);
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index 'tmp2_pkey' for table 'tmp2'
diff --git a/src/test/regress/sql/alter_table.sql b/src/test/regress/sql/alter_table.sql
index 2319372b59..e23a75cebb 100644
--- a/src/test/regress/sql/alter_table.sql
+++ b/src/test/regress/sql/alter_table.sql
@@ -163,6 +163,22 @@ ALTER TABLE ten_k RENAME TO tenk1;
-- 5 values, sorted
SELECT unique1 FROM tenk1 WHERE unique1 < 5;
+-- ALTER TABLE ... RENAME on non-table relations
+-- renaming indexes (FIXME: this should probably test the index's functionality)
+ALTER TABLE onek_unique1 RENAME TO tmp_onek_unique1;
+ALTER TABLE tmp_onek_unique1 RENAME TO onek_unique1;
+-- renaming views
+CREATE VIEW tmp_view (unique1) AS SELECT unique1 FROM tenk1;
+ALTER TABLE tmp_view RENAME TO tmp_view_new;
+-- 5 values, sorted
+SELECT unique1 FROM tenk1 WHERE unique1 < 5;
+DROP VIEW tmp_view_new;
+-- renaming sequences
+CREATE SEQUENCE foo_seq;
+ALTER TABLE foo_seq RENAME TO foo_seq_new;
+SELECT * FROM foo_seq_new;
+DROP SEQUENCE foo_seq_new;
+
-- FOREIGN KEY CONSTRAINT adding TEST
CREATE TABLE tmp2 (a int primary key);