Don't destroy SMgrRelations at relcache invalidation
authorHeikki Linnakangas <[email protected]>
Mon, 11 Mar 2024 07:08:02 +0000 (09:08 +0200)
committerHeikki Linnakangas <[email protected]>
Mon, 11 Mar 2024 07:08:02 +0000 (09:08 +0200)
commitaf0e7deb4a1c369bb8154ac55f085d6a93fe5c35
tree0096a3a99c8225f78d90a00cefde3d3b60ec95ab
parente629846472255c7a636c453a522755ef05489c90
Don't destroy SMgrRelations at relcache invalidation

With commit 21d9c3ee4e, SMgrRelations remain valid until end of
transaction (or longer if they're "pinned"). Relcache invalidation can
happen in the middle of a transaction, so we must not destroy them at
relcache invalidation anymore.

This was revealed by failures in the 'constraints' test in buildfarm
animals using -DCLOBBER_CACHE_ALWAYS. That started failing with commit
8af2565248, which was the first commit that started to rely on an
SMgrRelation living until end of transaction.

Diagnosed-by: Tomas Vondra, Thomas Munro
Reviewed-by: Thomas Munro
Discussion: https://www.postgresql.org/message-id/CA%2BhUKGK%2B5DOmLaBp3Z7C4S-Yv6yoROvr1UncjH2S1ZbPT8D%2BZg%40mail.gmail.com
src/backend/storage/smgr/smgr.c
src/backend/utils/cache/relcache.c