/* * Drop a whole database during XLOG replay * * As above, but for DROP DATABASE instead of dropping a single rel */ void XLogDropDatabase(Oid dbid) { /* * This is unnecessarily heavy-handed, as it will close SMgrRelation * objects for other databases as well. DROP DATABASE occurs seldom enough * that it's not worth introducing a variant of smgrclose for just this * purpose. XXX: Or should we rather leave the smgr entries dangling? */ smgrcloseall(); forget_invalid_pages_db(dbid); }
/* * Drop a whole database during XLOG replay * * As above, but for DROP DATABASE instead of dropping a single rel */ void xlog_drop_database(oid_t dbid) { /* * This is unnecessarily heavy-handed, as it will close struct smgr * * objects for other databases as well. DROP DATABASE occurs seldom * enough that it's not worth introducing a variant of smgr_close for * just this purpose. * Or should we rather leave the smgr entries dangling? */ smgr_closeall(); forget_invalid_pages_db(dbid); }
/* * Drop a whole database during XLOG replay * * As above, but for DROP DATABASE instead of dropping a single rel */ void XLogDropDatabase(Oid dbid) { HASH_SEQ_STATUS status; XLogRelCacheEntry *hentry; hash_seq_init(&status, _xlrelcache); while ((hentry = (XLogRelCacheEntry *) hash_seq_search(&status)) != NULL) { XLogRelDesc *rdesc = hentry->rdesc; if (hentry->rnode.dbNode == dbid) RelationCloseSmgr(&(rdesc->reldata)); } forget_invalid_pages_db(dbid); }