Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit1999091

Browse files
committed
For 8.0 servers, get last built-in oid from pg_database
We didn't start ensuring that all built-in objects had OIDs less than16384 until 8.1, so for 8.0 servers we still need to query the value outof pg_database. We need this, in particular, to distinguish which castswere 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
1 parent58b1362 commit1999091

File tree

1 file changed

+54
-6
lines changed

1 file changed

+54
-6
lines changed

‎src/bin/pg_dump/pg_dump.c

Lines changed: 54 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,12 @@ boolg_verbose;/* User wants verbose narration of our
9696
/* subquery used to convert user ID (eg, datdba) to user name */
9797
static const char *username_subquery;
9898

99+
/*
100+
* For 8.0 and earlier servers, pulled from pg_database, for 8.1+ we use
101+
* FirstNormalObjectId - 1.
102+
*/
103+
static Oid g_last_builtin_oid; /* value of the last builtin oid */
104+
99105
/* The specified names/patterns should to match at least one entity */
100106
static intstrict_names = 0;
101107

@@ -233,6 +239,7 @@ static char *convertRegProcReference(Archive *fout,
233239
const char *proc);
234240
static char *convertOperatorReference(Archive *fout, const char *opr);
235241
static char *convertTSFunction(Archive *fout, Oid funcOid);
242+
static Oid findLastBuiltinOid_V71(Archive *fout, const char *);
236243
static void selectSourceSchema(Archive *fout, const char *schemaName);
237244
static char *getFormattedTypeName(Archive *fout, Oid oid, OidOptions opts);
238245
static void getBlobs(Archive *fout);
@@ -684,6 +691,20 @@ main(int argc, char **argv)
684691
exit_horribly(NULL,
685692
"Exported snapshots are not supported by this server version.\n");
686693

694+
/*
695+
* Find the last built-in OID, if needed (prior to 8.1)
696+
*
697+
* With 8.1 and above, we can just use FirstNormalObjectId - 1.
698+
*/
699+
if (fout->remoteVersion < 80100)
700+
g_last_builtin_oid = findLastBuiltinOid_V71(fout,
701+
PQdb(GetConnection(fout)));
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);
707+
687708
/* Expand schema selection patterns into OID lists */
688709
if (schema_include_patterns.head != NULL)
689710
{
@@ -1494,7 +1515,7 @@ selectDumpableCast(CastInfo *cast, Archive *fout)
14941515
* This would be DUMP_COMPONENT_ACL for from-initdb casts, but they do not
14951516
* support ACLs currently.
14961517
*/
1497-
if (cast->dobj.catId.oid < (Oid)FirstNormalObjectId)
1518+
if (cast->dobj.catId.oid <= (Oid)g_last_builtin_oid)
14981519
cast->dobj.dump = DUMP_COMPONENT_NONE;
14991520
else
15001521
cast->dobj.dump = fout->dopt->include_everything ?
@@ -1526,7 +1547,7 @@ selectDumpableProcLang(ProcLangInfo *plang, Archive *fout)
15261547
plang->dobj.dump = DUMP_COMPONENT_NONE;
15271548
else
15281549
{
1529-
if (plang->dobj.catId.oid < (Oid)FirstNormalObjectId)
1550+
if (plang->dobj.catId.oid <= (Oid)g_last_builtin_oid)
15301551
plang->dobj.dump = fout->remoteVersion < 90600 ?
15311552
DUMP_COMPONENT_NONE : DUMP_COMPONENT_ACL;
15321553
else
@@ -1552,7 +1573,7 @@ selectDumpableAccessMethod(AccessMethodInfo *method, Archive *fout)
15521573
* This would be DUMP_COMPONENT_ACL for from-initdb access methods, but
15531574
* they do not support ACLs currently.
15541575
*/
1555-
if (method->dobj.catId.oid < (Oid)FirstNormalObjectId)
1576+
if (method->dobj.catId.oid <= (Oid)g_last_builtin_oid)
15561577
method->dobj.dump = DUMP_COMPONENT_NONE;
15571578
else
15581579
method->dobj.dump = fout->dopt->include_everything ?
@@ -1577,7 +1598,7 @@ selectDumpableExtension(ExtensionInfo *extinfo, DumpOptions *dopt)
15771598
* change permissions on those objects, if they wish to, and have those
15781599
* changes preserved.
15791600
*/
1580-
if (dopt->binary_upgrade && extinfo->dobj.catId.oid < (Oid)FirstNormalObjectId)
1601+
if (dopt->binary_upgrade && extinfo->dobj.catId.oid <= (Oid)g_last_builtin_oid)
15811602
extinfo->dobj.dump = extinfo->dobj.dump_contains = DUMP_COMPONENT_ACL;
15821603
else
15831604
extinfo->dobj.dump = extinfo->dobj.dump_contains =
@@ -8820,8 +8841,8 @@ dumpExtension(Archive *fout, ExtensionInfo *extinfo)
88208841
/*
88218842
* We unconditionally create the extension, so we must drop it if it
88228843
* exists. This could happen if the user deleted 'plpgsql' and then
8823-
* readded it, causing its oid to be greater thanFirstNormalObjectId.
8824-
* TheFirstNormalObjectId test was kept to avoid repeatedly dropping
8844+
* readded it, causing its oid to be greater thang_last_builtin_oid.
8845+
* Theg_last_builtin_oid test was kept to avoid repeatedly dropping
88258846
* and recreating extensions like 'plpgsql'.
88268847
*/
88278848
appendPQExpBuffer(q, "DROP EXTENSION IF EXISTS %s;\n", qextname);
@@ -15324,6 +15345,33 @@ dumpTableConstraintComment(Archive *fout, ConstraintInfo *coninfo)
1532415345
destroyPQExpBuffer(labelq);
1532515346
}
1532615347

15348+
/*
15349+
* findLastBuiltinOid_V71 -
15350+
*
15351+
* find the last built in oid
15352+
*
15353+
* For 7.1 through 8.0, we do this by retrieving datlastsysoid from the
15354+
* pg_database entry for the current database.
15355+
*/
15356+
static Oid
15357+
findLastBuiltinOid_V71(Archive *fout, const char *dbname)
15358+
{
15359+
PGresult *res;
15360+
Oid last_oid;
15361+
PQExpBuffer query = createPQExpBuffer();
15362+
15363+
resetPQExpBuffer(query);
15364+
appendPQExpBufferStr(query, "SELECT datlastsysoid from pg_database where datname = ");
15365+
appendStringLiteralAH(query, dbname, fout);
15366+
15367+
res = ExecuteSqlQueryForSingleRow(fout, query->data);
15368+
last_oid = atooid(PQgetvalue(res, 0, PQfnumber(res, "datlastsysoid")));
15369+
PQclear(res);
15370+
destroyPQExpBuffer(query);
15371+
15372+
return last_oid;
15373+
}
15374+
1532715375
/*
1532815376
* dumpSequence
1532915377
* write the declaration (not data) of one user-defined sequence

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp