Skip to content

Commit 7e8c25c

Browse files
committed
Initialize tableoid field correctly when dumping foreign data wrappers and
servers. AFAICT it's harmless at the moment because nothing can depend on either, but as soon as we introduce an object type with such dependencies, tableoid needs to be set or pg_dump will fail to interpret the dependencies correctly. In theory, I guess the uninitialized garbage in tableoid could cause the object to be mistaken for some other object with same OID as well.
1 parent 9aae815 commit 7e8c25c

File tree

1 file changed

+8
-2
lines changed

1 file changed

+8
-2
lines changed

src/bin/pg_dump/pg_dump.c

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5851,6 +5851,7 @@ getForeignDataWrappers(int *numForeignDataWrappers)
58515851
int i;
58525852
PQExpBuffer query = createPQExpBuffer();
58535853
FdwInfo *fdwinfo;
5854+
int i_tableoid;
58545855
int i_oid;
58555856
int i_fdwname;
58565857
int i_rolname;
@@ -5868,7 +5869,7 @@ getForeignDataWrappers(int *numForeignDataWrappers)
58685869
/* Make sure we are in proper schema */
58695870
selectSourceSchema("pg_catalog");
58705871

5871-
appendPQExpBuffer(query, "SELECT oid, fdwname, "
5872+
appendPQExpBuffer(query, "SELECT tableoid, oid, fdwname, "
58725873
"(%s fdwowner) AS rolname, fdwvalidator::pg_catalog.regproc, fdwacl,"
58735874
"array_to_string(ARRAY("
58745875
" SELECT option_name || ' ' || quote_literal(option_value) "
@@ -5884,6 +5885,7 @@ getForeignDataWrappers(int *numForeignDataWrappers)
58845885

58855886
fdwinfo = (FdwInfo *) malloc(ntups * sizeof(FdwInfo));
58865887

5888+
i_tableoid = PQfnumber(res, "tableoid");
58875889
i_oid = PQfnumber(res, "oid");
58885890
i_fdwname = PQfnumber(res, "fdwname");
58895891
i_rolname = PQfnumber(res, "rolname");
@@ -5894,6 +5896,7 @@ getForeignDataWrappers(int *numForeignDataWrappers)
58945896
for (i = 0; i < ntups; i++)
58955897
{
58965898
fdwinfo[i].dobj.objType = DO_FDW;
5899+
fdwinfo[i].dobj.catId.tableoid = atooid(PQgetvalue(res, i, i_tableoid));
58975900
fdwinfo[i].dobj.catId.oid = atooid(PQgetvalue(res, i, i_oid));
58985901
AssignDumpId(&fdwinfo[i].dobj);
58995902
fdwinfo[i].dobj.name = strdup(PQgetvalue(res, i, i_fdwname));
@@ -5930,6 +5933,7 @@ getForeignServers(int *numForeignServers)
59305933
int i;
59315934
PQExpBuffer query = createPQExpBuffer();
59325935
ForeignServerInfo *srvinfo;
5936+
int i_tableoid;
59335937
int i_oid;
59345938
int i_srvname;
59355939
int i_rolname;
@@ -5949,7 +5953,7 @@ getForeignServers(int *numForeignServers)
59495953
/* Make sure we are in proper schema */
59505954
selectSourceSchema("pg_catalog");
59515955

5952-
appendPQExpBuffer(query, "SELECT oid, srvname, "
5956+
appendPQExpBuffer(query, "SELECT tableoid, oid, srvname, "
59535957
"(%s srvowner) AS rolname, "
59545958
"srvfdw, srvtype, srvversion, srvacl,"
59555959
"array_to_string(ARRAY("
@@ -5966,6 +5970,7 @@ getForeignServers(int *numForeignServers)
59665970

59675971
srvinfo = (ForeignServerInfo *) malloc(ntups * sizeof(ForeignServerInfo));
59685972

5973+
i_tableoid = PQfnumber(res, "tableoid");
59695974
i_oid = PQfnumber(res, "oid");
59705975
i_srvname = PQfnumber(res, "srvname");
59715976
i_rolname = PQfnumber(res, "rolname");
@@ -5978,6 +5983,7 @@ getForeignServers(int *numForeignServers)
59785983
for (i = 0; i < ntups; i++)
59795984
{
59805985
srvinfo[i].dobj.objType = DO_FOREIGN_SERVER;
5986+
srvinfo[i].dobj.catId.tableoid = atooid(PQgetvalue(res, i, i_tableoid));
59815987
srvinfo[i].dobj.catId.oid = atooid(PQgetvalue(res, i, i_oid));
59825988
AssignDumpId(&srvinfo[i].dobj);
59835989
srvinfo[i].dobj.name = strdup(PQgetvalue(res, i, i_srvname));

0 commit comments

Comments
 (0)