提交 e6f9bf9b 编写于 作者: T Tom Lane

On Windows, force a checkpoint just before dropping a database's physical

files and directories.  This ensures that the bgwriter will close any open
file references it is holding for files therein, which is needed for the
rmdir() to succeed.  Andrew Dunstan and Tom Lane.
上级 a7049b52
......@@ -9,7 +9,7 @@
*
*
* IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/commands/dbcommands.c,v 1.145 2004/10/17 20:47:20 tgl Exp $
* $PostgreSQL: pgsql/src/backend/commands/dbcommands.c,v 1.146 2004/10/28 00:39:58 tgl Exp $
*
*-------------------------------------------------------------------------
*/
......@@ -32,6 +32,7 @@
#include "commands/tablespace.h"
#include "mb/pg_wchar.h"
#include "miscadmin.h"
#include "postmaster/bgwriter.h"
#include "storage/fd.h"
#include "storage/freespace.h"
#include "storage/sinval.h"
......@@ -624,6 +625,14 @@ dropdb(const char *dbname)
*/
FreeSpaceMapForgetDatabase(db_id);
/*
* On Windows, force a checkpoint so that the bgwriter doesn't hold any
* open files, which would cause rmdir() to fail.
*/
#ifdef WIN32
RequestCheckpoint(true);
#endif
/*
* Remove all tablespace subdirs belonging to the database.
*/
......
......@@ -37,7 +37,7 @@
*
*
* IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/postmaster/bgwriter.c,v 1.9 2004/10/12 21:54:40 petere Exp $
* $PostgreSQL: pgsql/src/backend/postmaster/bgwriter.c,v 1.10 2004/10/28 00:39:59 tgl Exp $
*
*-------------------------------------------------------------------------
*/
......@@ -346,6 +346,15 @@ BackgroundWriterMain(void)
CreateCheckPoint(false, force_checkpoint);
/*
* After any checkpoint, close all smgr files. This is so we
* won't hang onto smgr references to deleted files
* indefinitely. (It is safe to do this because this process
* does not have a relcache, and so no dangling references
* could remain.)
*/
smgrcloseall();
/*
* Indicate checkpoint completion to any waiting backends.
*/
......@@ -359,15 +368,6 @@ BackgroundWriterMain(void)
*/
last_checkpoint_time = now;
/*
* After any checkpoint, close all smgr files. This is so we
* won't hang onto smgr references to deleted files
* indefinitely. (It is safe to do this because this process
* does not have a relcache, and so no dangling references
* could remain.)
*/
smgrcloseall();
/* Nap for configured time before rechecking */
n = 1;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册