]> granicus.if.org Git - postgresql/commitdiff
Use a safer order of operations in dropdb(): rollbackable operations,
authorTom Lane <tgl@sss.pgh.pa.us>
Mon, 10 Oct 2005 20:02:20 +0000 (20:02 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Mon, 10 Oct 2005 20:02:20 +0000 (20:02 +0000)
ie removing shared-dependency entries, should happen before non-rollbackable
ones.  That way a failure during the rollbackable part doesn't leave us
with inconsistent state.

src/backend/commands/dbcommands.c

index 49d3e1d4f5da1bdc8e0a860dd5f3f57ba83c15a3..548648066b898b1c54a0db9e4de975aaba656169 100644 (file)
@@ -15,7 +15,7 @@
  *
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/commands/dbcommands.c,v 1.171 2005/08/22 17:38:20 tgl Exp $
+ *       $PostgreSQL: pgsql/src/backend/commands/dbcommands.c,v 1.172 2005/10/10 20:02:20 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -646,6 +646,11 @@ dropdb(const char *dbname)
         */
        DeleteComments(db_id, DatabaseRelationId, 0);
 
+       /*
+        * Remove shared dependency references for the database.
+        */
+       dropDatabaseDependencies(db_id);
+
        /*
         * Drop pages for this database that are in the shared buffer cache.
         * This is important to ensure that no remaining backend tries to
@@ -674,11 +679,6 @@ dropdb(const char *dbname)
        /* Close pg_database, but keep exclusive lock till commit */
        heap_close(pgdbrel, NoLock);
 
-       /*
-        * Remove shared dependency references for the database.
-        */
-       dropDatabaseDependencies(db_id);
-
        /*
         * Set flag to update flat database file at commit.
         */