Use a safer order of operations in dropdb(): rollbackable operations,
authorTom Lane
Mon, 10 Oct 2005 20:02:20 +0000 (20:02 +0000)
committerTom Lane
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.
     */