]> granicus.if.org Git - postgresql/commitdiff
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:36:50 +0000 (17:36 -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);