aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/backend/utils/cache/relcache.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/backend/utils/cache/relcache.c b/src/backend/utils/cache/relcache.c
index f2a9c5dffb2..6758d59c90d 100644
--- a/src/backend/utils/cache/relcache.c
+++ b/src/backend/utils/cache/relcache.c
@@ -2163,8 +2163,14 @@ RelationCacheInvalidate(void)
/* Must close all smgr references to avoid leaving dangling ptrs */
RelationCloseSmgr(relation);
- /* Ignore new relations, since they are never cross-backend targets */
- if (relation->rd_createSubid != InvalidSubTransactionId)
+ /*
+ * Ignore new relations; no other backend will manipulate them before
+ * we commit. Likewise, before replacing a relation's relfilenode, we
+ * shall have acquired AccessExclusiveLock and drained any applicable
+ * pending invalidations.
+ */
+ if (relation->rd_createSubid != InvalidSubTransactionId ||
+ relation->rd_newRelfilenodeSubid != InvalidSubTransactionId)
continue;
relcacheInvalsReceived++;