From 3503f19eeb812d7d7bbc25de25376c3a46f52257 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Sun, 22 Sep 2002 20:56:28 +0000 Subject: [PATCH] RelationClearRelation must reset rd_targblock and update rd_nblocks even when dealing with a nailed-in-cache relation; otherwise, following VACUUM truncation of a system catalog, other backends might have unreasonably large values of these fields. --- src/backend/utils/cache/relcache.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/backend/utils/cache/relcache.c b/src/backend/utils/cache/relcache.c index a0eeff11dd..ac80fba519 100644 --- a/src/backend/utils/cache/relcache.c +++ b/src/backend/utils/cache/relcache.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/cache/relcache.c,v 1.175 2002/09/04 20:31:30 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/cache/relcache.c,v 1.176 2002/09/22 20:56:28 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -1685,10 +1685,14 @@ RelationClearRelation(Relation relation, bool rebuild) /* * Never, never ever blow away a nailed-in system relation, because - * we'd be unable to recover. + * we'd be unable to recover. However, we must update rd_nblocks + * and reset rd_targblock, in case we got called because of a relation + * cache flush that was triggered by VACUUM. */ if (relation->rd_isnailed) { + relation->rd_targblock = InvalidBlockNumber; + RelationUpdateNumberOfBlocks(relation); #ifdef ENABLE_REINDEX_NAILED_RELATIONS RelationReloadClassinfo(relation); #endif /* ENABLE_REINDEX_NAILED_RELATIONS */ -- 2.11.0