diff options
author | Michael Paquier <michael@paquier.xyz> | 2018-12-17 10:34:44 +0900 |
---|---|---|
committer | Michael Paquier <michael@paquier.xyz> | 2018-12-17 10:34:44 +0900 |
commit | b13fd344c5fce6a2f95b758e97b79eb00adf2731 (patch) | |
tree | 2dd60ace2ee6313cc28cb22193ae9b5b1e09c8fc /src/backend/commands/tablecmds.c | |
parent | a73d08319537d807a520a72bc5bd17279672c3de (diff) | |
download | postgresql-b13fd344c5fce6a2f95b758e97b79eb00adf2731.tar.gz postgresql-b13fd344c5fce6a2f95b758e97b79eb00adf2731.zip |
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.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index d6d0de1b01b..fe75f9e80bb 100644 --- a/src/backend/commands/tablecmds.c +++ b/src/backend/commands/tablecmds.c @@ -3019,8 +3019,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; } |