postgres.git / summary / log / commit / refs

commit    3e00d332615be32d64bbb1f604a783fade3146c0
Author:   Bruce Momjian <bruce@momjian.us>
Date:     Wed Jul 04 21:36:50 2012 +0000

    Have pg_dump in binary-upgrade mode properly drop user-created
    extensions that might exist in the new empty cluster databases, like
    plpgsql.
    
    Backpatch to 9.2.


src/bin/pg_dump/pg_dump.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c index afb28a870e6..7d672878ed3 100644 --- a/src/bin/pg_dump/pg_dump.c +++ b/src/bin/pg_dump/pg_dump.c @@ -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); [parent: 0fc32c00d744]