|
|
|
@ -335,59 +335,6 @@ smgrcreate(SMgrRelation reln, ForkNumber forknum, bool isRedo) |
|
|
|
|
smgrsw[reln->smgr_which].smgr_create(reln, forknum, isRedo); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* smgrdounlink() -- Immediately unlink all forks of a relation. |
|
|
|
|
* |
|
|
|
|
* All forks of the relation are 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(s) to be gone |
|
|
|
|
* already. |
|
|
|
|
*/ |
|
|
|
|
void |
|
|
|
|
smgrdounlink(SMgrRelation reln, bool isRedo) |
|
|
|
|
{ |
|
|
|
|
RelFileNodeBackend rnode = reln->smgr_rnode; |
|
|
|
|
int which = reln->smgr_which; |
|
|
|
|
ForkNumber forknum; |
|
|
|
|
|
|
|
|
|
/* Close the forks at smgr level */ |
|
|
|
|
for (forknum = 0; forknum <= MAX_FORKNUM; forknum++) |
|
|
|
|
smgrsw[which].smgr_close(reln, forknum); |
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Get rid of any remaining buffers for the relation. bufmgr will just |
|
|
|
|
* drop them without bothering to write the contents. |
|
|
|
|
*/ |
|
|
|
|
DropRelFileNodesAllBuffers(&rnode, 1); |
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* 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, InvalidForkNumber, isRedo); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* smgrdosyncall() -- Immediately sync all forks of all given relations |
|
|
|
|
* |
|
|
|
@ -432,9 +379,6 @@ smgrdosyncall(SMgrRelation *rels, int nrels) |
|
|
|
|
* |
|
|
|
|
* If isRedo is true, it is okay for the underlying file(s) to be gone |
|
|
|
|
* already. |
|
|
|
|
* |
|
|
|
|
* This is equivalent to calling smgrdounlink for each relation, but it's |
|
|
|
|
* significantly quicker so should be preferred when possible. |
|
|
|
|
*/ |
|
|
|
|
void |
|
|
|
|
smgrdounlinkall(SMgrRelation *rels, int nrels, bool isRedo) |
|
|
|
|