Commit 1d8198bb authored by Bruce Momjian's avatar Bruce Momjian

Add support for ALTER TABLE IF EXISTS ... RENAME CONSTRAINT

Also add regression test.  Previously this was documented to work, but
didn't.
parent feeb526c
...@@ -2497,9 +2497,16 @@ RenameConstraint(RenameStmt *stmt) ...@@ -2497,9 +2497,16 @@ RenameConstraint(RenameStmt *stmt)
{ {
/* lock level taken here should match rename_constraint_internal */ /* lock level taken here should match rename_constraint_internal */
relid = RangeVarGetRelidExtended(stmt->relation, AccessExclusiveLock, relid = RangeVarGetRelidExtended(stmt->relation, AccessExclusiveLock,
false, false, stmt->missing_ok, false,
RangeVarCallbackForRenameAttribute, RangeVarCallbackForRenameAttribute,
NULL); NULL);
if (!OidIsValid(relid))
{
ereport(NOTICE,
(errmsg("relation \"%s\" does not exist, skipping",
stmt->relation->relname)));
return InvalidObjectAddress;
}
} }
return return
......
...@@ -7706,6 +7706,17 @@ RenameStmt: ALTER AGGREGATE func_name aggr_args RENAME TO name ...@@ -7706,6 +7706,17 @@ RenameStmt: ALTER AGGREGATE func_name aggr_args RENAME TO name
n->relation = $3; n->relation = $3;
n->subname = $6; n->subname = $6;
n->newname = $8; n->newname = $8;
n->missing_ok = false;
$$ = (Node *)n;
}
| ALTER TABLE IF_P EXISTS relation_expr RENAME CONSTRAINT name TO name
{
RenameStmt *n = makeNode(RenameStmt);
n->renameType = OBJECT_TABCONSTRAINT;
n->relation = $5;
n->subname = $8;
n->newname = $10;
n->missing_ok = true;
$$ = (Node *)n; $$ = (Node *)n;
} }
| ALTER FOREIGN TABLE relation_expr RENAME opt_column name TO name | ALTER FOREIGN TABLE relation_expr RENAME opt_column name TO name
......
...@@ -289,6 +289,8 @@ Inherits: constraint_rename_test ...@@ -289,6 +289,8 @@ Inherits: constraint_rename_test
DROP TABLE constraint_rename_test2; DROP TABLE constraint_rename_test2;
DROP TABLE constraint_rename_test; DROP TABLE constraint_rename_test;
ALTER TABLE IF EXISTS constraint_not_exist RENAME CONSTRAINT con3 TO con3foo; -- ok
NOTICE: relation "constraint_not_exist" does not exist, skipping
ALTER TABLE IF EXISTS constraint_rename_test ADD CONSTRAINT con4 UNIQUE (a); ALTER TABLE IF EXISTS constraint_rename_test ADD CONSTRAINT con4 UNIQUE (a);
NOTICE: relation "constraint_rename_test" does not exist, skipping NOTICE: relation "constraint_rename_test" does not exist, skipping
-- FOREIGN KEY CONSTRAINT adding TEST -- FOREIGN KEY CONSTRAINT adding TEST
......
...@@ -228,6 +228,7 @@ ALTER TABLE constraint_rename_test RENAME CONSTRAINT con3 TO con3foo; -- ok ...@@ -228,6 +228,7 @@ ALTER TABLE constraint_rename_test RENAME CONSTRAINT con3 TO con3foo; -- ok
\d constraint_rename_test2 \d constraint_rename_test2
DROP TABLE constraint_rename_test2; DROP TABLE constraint_rename_test2;
DROP TABLE constraint_rename_test; DROP TABLE constraint_rename_test;
ALTER TABLE IF EXISTS constraint_not_exist RENAME CONSTRAINT con3 TO con3foo; -- ok
ALTER TABLE IF EXISTS constraint_rename_test ADD CONSTRAINT con4 UNIQUE (a); ALTER TABLE IF EXISTS constraint_rename_test ADD CONSTRAINT con4 UNIQUE (a);
-- FOREIGN KEY CONSTRAINT adding TEST -- FOREIGN KEY CONSTRAINT adding TEST
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment