summaryrefslogtreecommitdiff
path: root/src/backend/commands/tablecmds.c
diff options
context:
space:
mode:
authorMichael Paquier <michael@paquier.xyz>2018-12-17 10:37:24 +0900
committerMichael Paquier <michael@paquier.xyz>2018-12-17 10:37:24 +0900
commitd5d86e2cd6b82da7bc57a6b2be8c808463e73d93 (patch)
tree09dd30de8d6cbe89f2dd674787725d8383fa3093 /src/backend/commands/tablecmds.c
parentb10d2252b35326566d5520acbc65842927c4c3a1 (diff)
Make constraint rename issue relcache invalidation on target relation
When a constraint gets renamed, it may have associated with it a target relation (for example domain constraints don't have one). Not invalidating the target relation cache when issuing the renaming can result in issues with subsequent commands that refer to the old constraint name using the relation cache, causing various failures. One pattern spotted was using CREATE TABLE LIKE after a constraint renaming. Reported-by: Stuart <sfbarbee@gmail.com> Author: Amit Langote Reviewed-by: Michael Paquier Discussion: https://postgr.es/m/2047094.V130LYfLq4@station53.ousa.org
Diffstat (limited to 'src/backend/commands/tablecmds.c')
-rw-r--r--src/backend/commands/tablecmds.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 6bbd906c0b7..8c2f650a88a 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -2428,8 +2428,15 @@ rename_constraint_internal(Oid myrelid,
ReleaseSysCache(tuple);
if (targetrelation)
+ {
relation_close(targetrelation, NoLock); /* close rel but keep lock */
+ /*
+ * Invalidate relcache so as others can see the new constraint name.
+ */
+ CacheInvalidateRelcache(targetrelation);
+ }
+
return constraintOid;
}