Skip to content

Commit 0e6519e

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 6f664c1 commit 0e6519e

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
@@ -5843,6 +5843,7 @@ getForeignDataWrappers(int *numForeignDataWrappers)
58435843
int i;
58445844
PQExpBuffer query = createPQExpBuffer();
58455845
FdwInfo *fdwinfo;
5846+
int i_tableoid;
58465847
int i_oid;
58475848
int i_fdwname;
58485849
int i_rolname;
@@ -5860,7 +5861,7 @@ getForeignDataWrappers(int *numForeignDataWrappers)
58605861
/* Make sure we are in proper schema */
58615862
selectSourceSchema("pg_catalog");
58625863

5863-
appendPQExpBuffer(query, "SELECT oid, fdwname, "
5864+
appendPQExpBuffer(query, "SELECT tableoid, oid, fdwname, "
58645865
"(%s fdwowner) AS rolname, fdwvalidator::pg_catalog.regproc, fdwacl,"
58655866
"array_to_string(ARRAY("
58665867
" SELECT option_name || ' ' || quote_literal(option_value) "
@@ -5876,6 +5877,7 @@ getForeignDataWrappers(int *numForeignDataWrappers)
58765877

58775878
fdwinfo = (FdwInfo *) malloc(ntups * sizeof(FdwInfo));
58785879

5880+
i_tableoid = PQfnumber(res, "tableoid");
58795881
i_oid = PQfnumber(res, "oid");
58805882
i_fdwname = PQfnumber(res, "fdwname");
58815883
i_rolname = PQfnumber(res, "rolname");
@@ -5886,6 +5888,7 @@ getForeignDataWrappers(int *numForeignDataWrappers)
58865888
for (i = 0; i < ntups; i++)
58875889
{
58885890
fdwinfo[i].dobj.objType = DO_FDW;
5891+
fdwinfo[i].dobj.catId.tableoid = atooid(PQgetvalue(res, i, i_tableoid));
58895892
fdwinfo[i].dobj.catId.oid = atooid(PQgetvalue(res, i, i_oid));
58905893
AssignDumpId(&fdwinfo[i].dobj);
58915894
fdwinfo[i].dobj.name = strdup(PQgetvalue(res, i, i_fdwname));
@@ -5922,6 +5925,7 @@ getForeignServers(int *numForeignServers)
59225925
int i;
59235926
PQExpBuffer query = createPQExpBuffer();
59245927
ForeignServerInfo *srvinfo;
5928+
int i_tableoid;
59255929
int i_oid;
59265930
int i_srvname;
59275931
int i_rolname;
@@ -5941,7 +5945,7 @@ getForeignServers(int *numForeignServers)
59415945
/* Make sure we are in proper schema */
59425946
selectSourceSchema("pg_catalog");
59435947

5944-
appendPQExpBuffer(query, "SELECT oid, srvname, "
5948+
appendPQExpBuffer(query, "SELECT tableoid, oid, srvname, "
59455949
"(%s srvowner) AS rolname, "
59465950
"srvfdw, srvtype, srvversion, srvacl,"
59475951
"array_to_string(ARRAY("
@@ -5958,6 +5962,7 @@ getForeignServers(int *numForeignServers)
59585962

59595963
srvinfo = (ForeignServerInfo *) malloc(ntups * sizeof(ForeignServerInfo));
59605964

5965+
i_tableoid = PQfnumber(res, "tableoid");
59615966
i_oid = PQfnumber(res, "oid");
59625967
i_srvname = PQfnumber(res, "srvname");
59635968
i_rolname = PQfnumber(res, "rolname");
@@ -5970,6 +5975,7 @@ getForeignServers(int *numForeignServers)
59705975
for (i = 0; i < ntups; i++)
59715976
{
59725977
srvinfo[i].dobj.objType = DO_FOREIGN_SERVER;
5978+
srvinfo[i].dobj.catId.tableoid = atooid(PQgetvalue(res, i, i_tableoid));
59735979
srvinfo[i].dobj.catId.oid = atooid(PQgetvalue(res, i, i_oid));
59745980
AssignDumpId(&srvinfo[i].dobj);
59755981
srvinfo[i].dobj.name = strdup(PQgetvalue(res, i, i_srvname));

0 commit comments

Comments
 (0)