diff options
author | Simon Riggs <simon@2ndQuadrant.com> | 2012-12-24 16:43:22 +0000 |
---|---|---|
committer | Simon Riggs <simon@2ndQuadrant.com> | 2012-12-24 16:43:22 +0000 |
commit | ae9aba69a8608c6e5df01ee4f20c4799f5d2850c (patch) | |
tree | 6486332e63333b7c23cd0631310ff77ba7eb9f4c | |
parent | 42fa810c144cb76c911cc664244bc369911eb840 (diff) | |
download | postgresql-ae9aba69a8608c6e5df01ee4f20c4799f5d2850c.tar.gz |
Keep rd_newRelfilenodeSubid across overflow.
Teach RelationCacheInvalidate() to keep rd_newRelfilenodeSubid across rel cache
message overflows, so that behaviour is now fully deterministic.
Noah Misch
-rw-r--r-- | src/backend/utils/cache/relcache.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/src/backend/utils/cache/relcache.c b/src/backend/utils/cache/relcache.c index f2a9c5dffb..6758d59c90 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++; |