Index: src/backend/utils/cache/relcache.c =================================================================== RCS file: /cvsroot/pgsql/src/backend/utils/cache/relcache.c,v retrieving revision 1.287.2.3 diff -c -r1.287.2.3 relcache.c *** src/backend/utils/cache/relcache.c 13 Jan 2010 23:07:15 -0000 1.287.2.3 --- src/backend/utils/cache/relcache.c 14 Apr 2010 11:09:23 -0000 *************** *** 1773,1778 **** --- 1773,1781 ---- { Oid old_reltype = relation->rd_rel->reltype; + Assert((rebuild && relation->rd_refcnt > 0) || + (!rebuild && relation->rd_refcnt == 0)); + /* * Make sure smgr and lower levels close the relation's files, if they * weren't closed already. If the relation is not getting deleted, the *************** *** 1968,1975 **** static void RelationFlushRelation(Relation relation) { - bool rebuild; - if (relation->rd_createSubid != InvalidSubTransactionId || relation->rd_newRelfilenodeSubid != InvalidSubTransactionId) { --- 1971,1976 ---- *************** *** 1978,1994 **** * forget the "new" status of the relation, which is a useful * optimization to have. Ditto for the new-relfilenode status. */ ! rebuild = true; } else { /* * Pre-existing rels can be dropped from the relcache if not open. */ ! rebuild = !RelationHasReferenceCountZero(relation); } - - RelationClearRelation(relation, rebuild); } /* --- 1979,1996 ---- * forget the "new" status of the relation, which is a useful * optimization to have. Ditto for the new-relfilenode status. */ ! RelationIncrementReferenceCount(relation); ! RelationClearRelation(relation, true); ! RelationDecrementReferenceCount(relation); } else { /* * Pre-existing rels can be dropped from the relcache if not open. */ ! bool rebuild = !RelationHasReferenceCountZero(relation); ! RelationClearRelation(relation, rebuild); } } /*