aboutsummaryrefslogtreecommitdiff
path: root/src/backend/commands/dbcommands.c
diff options
context:
space:
mode:
authorAmit Kapila <akapila@postgresql.org>2019-11-09 17:28:27 +0530
committerAmit Kapila <akapila@postgresql.org>2019-11-11 07:42:45 +0530
commit9fab25c6cd1f943284b8e0014007cd5750d54308 (patch)
tree99cc8947b0c4f31f3da3c8056004999d246db0c9 /src/backend/commands/dbcommands.c
parentef8fcbff56e8904ba83b2659e9d0290e6106928e (diff)
downloadpostgresql-9fab25c6cd1f943284b8e0014007cd5750d54308.tar.gz
postgresql-9fab25c6cd1f943284b8e0014007cd5750d54308.zip
Rearrange dropdb() to avoid errors after allowing other sessions to exit.
During Drop Database, it is better to error out before allowing other sessions to exit and forcefully terminating autovacuum workers. All the other errors except for checking subscriptions are already done before. Author: Amit Kapila Discussion: https://postgr.es/m/CAA4eK1+qhLkCYG2oy9xug9ur_j=G2wQNRYAyd+-kZfZ1z42pLw@mail.gmail.com
Diffstat (limited to 'src/backend/commands/dbcommands.c')
-rw-r--r--src/backend/commands/dbcommands.c26
1 files changed, 13 insertions, 13 deletions
diff --git a/src/backend/commands/dbcommands.c b/src/backend/commands/dbcommands.c
index 01d66212e98..4ad62e6bf85 100644
--- a/src/backend/commands/dbcommands.c
+++ b/src/backend/commands/dbcommands.c
@@ -897,19 +897,6 @@ dropdb(const char *dbname, bool missing_ok)
}
/*
- * Check for other backends in the target database. (Because we hold the
- * database lock, no new ones can start after this.)
- *
- * As in CREATE DATABASE, check this after other error conditions.
- */
- if (CountOtherDBBackends(db_id, &notherbackends, &npreparedxacts))
- ereport(ERROR,
- (errcode(ERRCODE_OBJECT_IN_USE),
- errmsg("database \"%s\" is being accessed by other users",
- dbname),
- errdetail_busy_db(notherbackends, npreparedxacts)));
-
- /*
* Check if there are subscriptions defined in the target database.
*
* We can't drop them automatically because they might be holding
@@ -925,6 +912,19 @@ dropdb(const char *dbname, bool missing_ok)
nsubscriptions, nsubscriptions)));
/*
+ * Check for other backends in the target database. (Because we hold the
+ * database lock, no new ones can start after this.)
+ *
+ * As in CREATE DATABASE, check this after other error conditions.
+ */
+ if (CountOtherDBBackends(db_id, &notherbackends, &npreparedxacts))
+ ereport(ERROR,
+ (errcode(ERRCODE_OBJECT_IN_USE),
+ errmsg("database \"%s\" is being accessed by other users",
+ dbname),
+ errdetail_busy_db(notherbackends, npreparedxacts)));
+
+ /*
* Remove the database's tuple from pg_database.
*/
tup = SearchSysCache1(DATABASEOID, ObjectIdGetDatum(db_id));