From d79cd555da115a15f6e63f5e687521d1e274ff9a Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Mon, 17 Dec 2018 10:36:29 +0900 Subject: 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 Author: Amit Langote Reviewed-by: Michael Paquier Discussion: https://postgr.es/m/2047094.V130LYfLq4@station53.ousa.org --- src/backend/commands/tablecmds.c | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'src/backend/commands/tablecmds.c') diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index bc83a9a4a07..0747f90c341 100644 --- a/src/backend/commands/tablecmds.c +++ b/src/backend/commands/tablecmds.c @@ -2494,8 +2494,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 address; } -- cgit v1.2.3