Have pg_dump in binary-upgrade mode properly drop user-created
authorBruce Momjian <bruce@momjian.us>
Wed, 4 Jul 2012 21:36:50 +0000 (17:36 -0400)
committerBruce Momjian <bruce@momjian.us>
Wed, 4 Jul 2012 21:37:01 +0000 (17:37 -0400)
extensions that might exist in the new empty cluster databases, like
plpgsql.

Backpatch to 9.2.

src/bin/pg_dump/pg_dump.c

index afb28a870e6bd7d308aaabffbb998e61fb553470..7d672878ed359bebc4df2f2d1cf357a2f043c64e 100644 (file)
@@ -7331,6 +7331,16 @@ dumpExtension(Archive *fout, ExtensionInfo *extinfo)
        int         n;
 
        appendPQExpBuffer(q, "-- For binary upgrade, create an empty extension and insert objects into it\n");
+
+       /*
+        *  We unconditionally create the extension, so we must drop it if it
+        *  exists.  This could happen if the user deleted 'plpgsql' and then
+        *  readded it, causing its oid to be greater than FirstNormalObjectId.
+        *  The FirstNormalObjectId test was kept to avoid repeatedly dropping
+        *  and recreating extensions like 'plpgsql'.
+        */
+       appendPQExpBuffer(q, "DROP EXTENSION IF EXISTS %s;\n", qextname);
+
        appendPQExpBuffer(q,
                          "SELECT binary_upgrade.create_empty_extension(");
        appendStringLiteralAH(q, extinfo->dobj.name, fout);