@@ -96,7 +96,10 @@ bool g_verbose; /* User wants verbose narration of our
9696/* subquery used to convert user ID (eg, datdba) to user name */
9797static const char *username_subquery;
9898
99- /* obsolete as of 7.3: */
99+ /*
100+ * For 8.0 and earlier servers, pulled from pg_database, for 8.1+ we use
101+ * FirstNormalObjectId - 1.
102+ */
100103static Oid g_last_builtin_oid; /* value of the last builtin oid */
101104
102105/* The specified names/patterns should to match at least one entity */
@@ -683,17 +686,24 @@ main(int argc, char **argv)
683686 exit_horribly(NULL,
684687 "Exported snapshots are not supported by this server version.\n");
685688
686- /* Find the last built-in OID, if needed */
687- if (fout->remoteVersion < 70300)
689+ /*
690+ * Find the last built-in OID, if needed (prior to 8.1)
691+ *
692+ * With 8.1 and above, we can just use FirstNormalObjectId - 1.
693+ */
694+ if (fout->remoteVersion < 80100)
688695 {
689696 if (fout->remoteVersion >= 70100)
690697 g_last_builtin_oid = findLastBuiltinOid_V71(fout,
691698 PQdb(GetConnection(fout)));
692699 else
693700 g_last_builtin_oid = findLastBuiltinOid_V70(fout);
694- if (g_verbose)
695- write_msg(NULL, "last built-in OID is %u\n", g_last_builtin_oid);
696701 }
702+ else
703+ g_last_builtin_oid = FirstNormalObjectId - 1;
704+
705+ if (g_verbose)
706+ write_msg(NULL, "last built-in OID is %u\n", g_last_builtin_oid);
697707
698708 /* Expand schema selection patterns into OID lists */
699709 if (schema_include_patterns.head != NULL)
@@ -1507,7 +1517,7 @@ selectDumpableCast(CastInfo *cast, Archive *fout)
15071517 * This would be DUMP_COMPONENT_ACL for from-initdb casts, but they do not
15081518 * support ACLs currently.
15091519 */
1510- if (cast->dobj.catId.oid < (Oid) FirstNormalObjectId )
1520+ if (cast->dobj.catId.oid <= (Oid) g_last_builtin_oid )
15111521 cast->dobj.dump = DUMP_COMPONENT_NONE;
15121522 else
15131523 cast->dobj.dump = fout->dopt->include_everything ?
@@ -1539,7 +1549,7 @@ selectDumpableProcLang(ProcLangInfo *plang, Archive *fout)
15391549 plang->dobj.dump = DUMP_COMPONENT_NONE;
15401550 else
15411551 {
1542- if (plang->dobj.catId.oid < (Oid) FirstNormalObjectId )
1552+ if (plang->dobj.catId.oid <= (Oid) g_last_builtin_oid )
15431553 plang->dobj.dump = fout->remoteVersion < 90600 ?
15441554 DUMP_COMPONENT_NONE : DUMP_COMPONENT_ACL;
15451555 else
@@ -1565,7 +1575,7 @@ selectDumpableAccessMethod(AccessMethodInfo *method, Archive *fout)
15651575 * This would be DUMP_COMPONENT_ACL for from-initdb access methods, but
15661576 * they do not support ACLs currently.
15671577 */
1568- if (method->dobj.catId.oid < (Oid) FirstNormalObjectId )
1578+ if (method->dobj.catId.oid <= (Oid) g_last_builtin_oid )
15691579 method->dobj.dump = DUMP_COMPONENT_NONE;
15701580 else
15711581 method->dobj.dump = fout->dopt->include_everything ?
@@ -1590,7 +1600,7 @@ selectDumpableExtension(ExtensionInfo *extinfo, DumpOptions *dopt)
15901600 * change permissions on those objects, if they wish to, and have those
15911601 * changes preserved.
15921602 */
1593- if (dopt->binary_upgrade && extinfo->dobj.catId.oid < (Oid) FirstNormalObjectId )
1603+ if (dopt->binary_upgrade && extinfo->dobj.catId.oid <= (Oid) g_last_builtin_oid )
15941604 extinfo->dobj.dump = extinfo->dobj.dump_contains = DUMP_COMPONENT_ACL;
15951605 else
15961606 extinfo->dobj.dump = extinfo->dobj.dump_contains =
@@ -9571,8 +9581,8 @@ dumpExtension(Archive *fout, ExtensionInfo *extinfo)
95719581 /*
95729582 * We unconditionally create the extension, so we must drop it if it
95739583 * exists. This could happen if the user deleted 'plpgsql' and then
9574- * readded it, causing its oid to be greater than FirstNormalObjectId .
9575- * The FirstNormalObjectId test was kept to avoid repeatedly dropping
9584+ * readded it, causing its oid to be greater than g_last_builtin_oid .
9585+ * The g_last_builtin_oid test was kept to avoid repeatedly dropping
95769586 * and recreating extensions like 'plpgsql'.
95779587 */
95789588 appendPQExpBuffer(q, "DROP EXTENSION IF EXISTS %s;\n", qextname);
@@ -16284,10 +16294,10 @@ dumpTableConstraintComment(Archive *fout, ConstraintInfo *coninfo)
1628416294}
1628516295
1628616296/*
16287- * findLastBuiltInOid -
16297+ * findLastBuiltinOid -
1628816298 * find the last built in oid
1628916299 *
16290- * For 7.1 and 7.2 , we do this by retrieving datlastsysoid from the
16300+ * For 7.1 through 8.0 , we do this by retrieving datlastsysoid from the
1629116301 * pg_database entry for the current database
1629216302 */
1629316303static Oid
@@ -16309,7 +16319,7 @@ findLastBuiltinOid_V71(Archive *fout, const char *dbname)
1630916319}
1631016320
1631116321/*
16312- * findLastBuiltInOid -
16322+ * findLastBuiltinOid -
1631316323 * find the last built in oid
1631416324 *
1631516325 * For 7.0, we do this by assuming that the last thing that initdb does is to
0 commit comments