*** a/src/backend/storage/smgr/smgr.c --- b/src/backend/storage/smgr/smgr.c *************** *** 477,534 **** smgrdounlinkall(SMgrRelation *rels, int nrels, bool isRedo) } /* - * smgrdounlinkfork() -- Immediately unlink one fork of a relation. - * - * The specified fork of the relation is removed from the store. This - * should not be used during transactional operations, since it can't be - * undone. - * - * If isRedo is true, it is okay for the underlying file to be gone - * already. - */ - void - smgrdounlinkfork(SMgrRelation reln, ForkNumber forknum, bool isRedo) - { - RelFileNodeBackend rnode = reln->smgr_rnode; - int which = reln->smgr_which; - - /* Close the fork at smgr level */ - smgrsw[which].smgr_close(reln, forknum); - - /* - * Get rid of any remaining buffers for the fork. bufmgr will just drop - * them without bothering to write the contents. - */ - DropRelFileNodeBuffers(rnode, forknum, 0); - - /* - * It'd be nice to tell the stats collector to forget it immediately, too. - * But we can't because we don't know the OID (and in cases involving - * relfilenode swaps, it's not always clear which table OID to forget, - * anyway). - */ - - /* - * Send a shared-inval message to force other backends to close any - * dangling smgr references they may have for this rel. We should do this - * before starting the actual unlinking, in case we fail partway through - * that step. Note that the sinval message will eventually come back to - * this backend, too, and thereby provide a backstop that we closed our - * own smgr rel. - */ - CacheInvalidateSmgr(rnode); - - /* - * Delete the physical file(s). - * - * Note: smgr_unlink must treat deletion failure as a WARNING, not an - * ERROR, because we've already decided to commit or abort the current - * xact. - */ - smgrsw[which].smgr_unlink(rnode, forknum, isRedo); - } - - /* * smgrextend() -- Add a new block to a file. * * The semantics are nearly the same as smgrwrite(): write at the --- 477,482 ---- *** a/src/include/storage/smgr.h --- b/src/include/storage/smgr.h *************** *** 90,96 **** extern void smgrcloseall(void); extern void smgrclosenode(RelFileNodeBackend rnode); extern void smgrcreate(SMgrRelation reln, ForkNumber forknum, bool isRedo); extern void smgrdounlinkall(SMgrRelation *rels, int nrels, bool isRedo); - extern void smgrdounlinkfork(SMgrRelation reln, ForkNumber forknum, bool isRedo); extern void smgrextend(SMgrRelation reln, ForkNumber forknum, BlockNumber blocknum, char *buffer, bool skipFsync); extern void smgrprefetch(SMgrRelation reln, ForkNumber forknum, --- 90,95 ----