Add support for ALTER TABLE IF EXISTS ... RENAME CONSTRAINT
Also add regression test. Previously this was documented to work, but didn't.
This commit is contained in:
parent
feeb526cfe
commit
1d8198bb44
@ -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
|
|||||||
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
|
|||||||
|
|
||||||
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
|
|||||||
\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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user