]> granicus.if.org Git - postgresql/commitdiff
For 8.0 servers, get last built-in oid from pg_database
authorStephen Frost <sfrost@snowman.net>
Wed, 21 Dec 2016 18:47:32 +0000 (13:47 -0500)
committerStephen Frost <sfrost@snowman.net>
Wed, 21 Dec 2016 18:47:32 +0000 (13:47 -0500)
We didn't start ensuring that all built-in objects had OIDs less than
16384 until 8.1, so for 8.0 servers we still need to query the value out
of pg_database.  We need this, in particular, to distinguish which casts
were built-in and which were user-defined.

For HEAD, we only worry about going back to 8.0, for the back-branches,
we also ensure that 7.0-7.4 work.

Discussion: https://www.postgresql.org/message-id/flat/20160504183952.GE10850%40tamriel.snowman.net

src/bin/pg_dump/pg_dump.c

index ec690b091bbecee45ed6b72a5101776819efad10..36c62363aa036a1e83d6313dd6386442a7c2143a 100644 (file)
@@ -97,7 +97,10 @@ const char *lockWaitTimeout;
 /* subquery used to convert user ID (eg, datdba) to user name */
 static const char *username_subquery;
 
-/* obsolete as of 7.3: */
+/*
+ * For 8.0 and earlier servers, pulled from pg_database, for 8.1+ we use
+ * FirstNormalObjectId - 1.
+ */
 static Oid     g_last_builtin_oid; /* value of the last builtin oid */
 
 /*
@@ -657,17 +660,24 @@ main(int argc, char **argv)
        else
                username_subquery = "SELECT usename FROM pg_user WHERE usesysid =";
 
-       /* Find the last built-in OID, if needed */
-       if (fout->remoteVersion < 70300)
+       /*
+        * Find the last built-in OID, if needed (prior to 8.1)
+        *
+        * With 8.1 and above, we can just use FirstNormalObjectId - 1.
+        */
+       if (fout->remoteVersion < 80100)
        {
                if (fout->remoteVersion >= 70100)
                        g_last_builtin_oid = findLastBuiltinOid_V71(fout,
                                                                                                  PQdb(GetConnection(fout)));
                else
                        g_last_builtin_oid = findLastBuiltinOid_V70(fout);
-               if (g_verbose)
-                       write_msg(NULL, "last built-in OID is %u\n", g_last_builtin_oid);
        }
+       else
+               g_last_builtin_oid = FirstNormalObjectId - 1;
+
+       if (g_verbose)
+               write_msg(NULL, "last built-in OID is %u\n", g_last_builtin_oid);
 
        /* Expand schema selection patterns into OID lists */
        if (schema_include_patterns.head != NULL)
@@ -1275,7 +1285,7 @@ selectDumpableCast(CastInfo *cast)
        if (checkExtensionMembership(&cast->dobj))
                return;                                 /* extension membership overrides all else */
 
-       if (cast->dobj.catId.oid < (Oid) FirstNormalObjectId)
+       if (cast->dobj.catId.oid <= (Oid) g_last_builtin_oid)
                cast->dobj.dump = false;
        else
                cast->dobj.dump = include_everything;
@@ -1295,7 +1305,7 @@ selectDumpableProcLang(ProcLangInfo *plang)
        if (checkExtensionMembership(&plang->dobj))
                return;                                 /* extension membership overrides all else */
 
-       if (plang->dobj.catId.oid < (Oid) FirstNormalObjectId)
+       if (plang->dobj.catId.oid <= (Oid) g_last_builtin_oid)
                plang->dobj.dump = false;
        else
                plang->dobj.dump = include_everything;
@@ -1314,7 +1324,7 @@ selectDumpableProcLang(ProcLangInfo *plang)
 static void
 selectDumpableExtension(ExtensionInfo *extinfo)
 {
-       if (binary_upgrade && extinfo->dobj.catId.oid < (Oid) FirstNormalObjectId)
+       if (binary_upgrade && extinfo->dobj.catId.oid <= (Oid) g_last_builtin_oid)
                extinfo->dobj.dump = false;
        else
                extinfo->dobj.dump = include_everything;
@@ -7513,8 +7523,8 @@ dumpExtension(Archive *fout, ExtensionInfo *extinfo)
                /*
                 *      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
+                *      readded it, causing its oid to be greater than g_last_builtin_oid.
+                *      The g_last_builtin_oid test was kept to avoid repeatedly dropping
                 *      and recreating extensions like 'plpgsql'.
                 */
                appendPQExpBuffer(q, "DROP EXTENSION IF EXISTS %s;\n", qextname);
@@ -13330,10 +13340,10 @@ dumpTableConstraintComment(Archive *fout, ConstraintInfo *coninfo)
 }
 
 /*
- * findLastBuiltInOid -
+ * findLastBuiltinOid -
  * find the last built in oid
  *
- * For 7.1 and 7.2, we do this by retrieving datlastsysoid from the
+ * For 7.1 through 8.0, we do this by retrieving datlastsysoid from the
  * pg_database entry for the current database
  */
 static Oid
@@ -13355,7 +13365,7 @@ findLastBuiltinOid_V71(Archive *fout, const char *dbname)
 }
 
 /*
- * findLastBuiltInOid -
+ * findLastBuiltinOid -
  * find the last built in oid
  *
  * For 7.0, we do this by assuming that the last thing that initdb does is to