summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorHeikki Linnakangas <heikki.linnakangas@iki.fi>2010-09-23 14:49:00 +0300
committerHeikki Linnakangas <heikki.linnakangas@iki.fi>2010-09-23 15:00:04 +0300
commit0e6519e11523e8f504d29eb05e4775aa6a847fa5 (patch)
tree67d5467a5200c37d83b79a86befaac07e2adaff2 /src
parent6f664c1af4ebb8d4f131af04d5762ac6f720b70b (diff)
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.
Diffstat (limited to 'src')
-rw-r--r--src/bin/pg_dump/pg_dump.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c
index 7a06f9b20a8..f93affd089f 100644
--- a/src/bin/pg_dump/pg_dump.c
+++ b/src/bin/pg_dump/pg_dump.c
@@ -5843,6 +5843,7 @@ getForeignDataWrappers(int *numForeignDataWrappers)
int i;
PQExpBuffer query = createPQExpBuffer();
FdwInfo *fdwinfo;
+ int i_tableoid;
int i_oid;
int i_fdwname;
int i_rolname;
@@ -5860,7 +5861,7 @@ getForeignDataWrappers(int *numForeignDataWrappers)
/* Make sure we are in proper schema */
selectSourceSchema("pg_catalog");
- appendPQExpBuffer(query, "SELECT oid, fdwname, "
+ appendPQExpBuffer(query, "SELECT tableoid, oid, fdwname, "
"(%s fdwowner) AS rolname, fdwvalidator::pg_catalog.regproc, fdwacl,"
"array_to_string(ARRAY("
" SELECT option_name || ' ' || quote_literal(option_value) "
@@ -5876,6 +5877,7 @@ getForeignDataWrappers(int *numForeignDataWrappers)
fdwinfo = (FdwInfo *) malloc(ntups * sizeof(FdwInfo));
+ i_tableoid = PQfnumber(res, "tableoid");
i_oid = PQfnumber(res, "oid");
i_fdwname = PQfnumber(res, "fdwname");
i_rolname = PQfnumber(res, "rolname");
@@ -5886,6 +5888,7 @@ getForeignDataWrappers(int *numForeignDataWrappers)
for (i = 0; i < ntups; i++)
{
fdwinfo[i].dobj.objType = DO_FDW;
+ fdwinfo[i].dobj.catId.tableoid = atooid(PQgetvalue(res, i, i_tableoid));
fdwinfo[i].dobj.catId.oid = atooid(PQgetvalue(res, i, i_oid));
AssignDumpId(&fdwinfo[i].dobj);
fdwinfo[i].dobj.name = strdup(PQgetvalue(res, i, i_fdwname));
@@ -5922,6 +5925,7 @@ getForeignServers(int *numForeignServers)
int i;
PQExpBuffer query = createPQExpBuffer();
ForeignServerInfo *srvinfo;
+ int i_tableoid;
int i_oid;
int i_srvname;
int i_rolname;
@@ -5941,7 +5945,7 @@ getForeignServers(int *numForeignServers)
/* Make sure we are in proper schema */
selectSourceSchema("pg_catalog");
- appendPQExpBuffer(query, "SELECT oid, srvname, "
+ appendPQExpBuffer(query, "SELECT tableoid, oid, srvname, "
"(%s srvowner) AS rolname, "
"srvfdw, srvtype, srvversion, srvacl,"
"array_to_string(ARRAY("
@@ -5958,6 +5962,7 @@ getForeignServers(int *numForeignServers)
srvinfo = (ForeignServerInfo *) malloc(ntups * sizeof(ForeignServerInfo));
+ i_tableoid = PQfnumber(res, "tableoid");
i_oid = PQfnumber(res, "oid");
i_srvname = PQfnumber(res, "srvname");
i_rolname = PQfnumber(res, "rolname");
@@ -5970,6 +5975,7 @@ getForeignServers(int *numForeignServers)
for (i = 0; i < ntups; i++)
{
srvinfo[i].dobj.objType = DO_FOREIGN_SERVER;
+ srvinfo[i].dobj.catId.tableoid = atooid(PQgetvalue(res, i, i_tableoid));
srvinfo[i].dobj.catId.oid = atooid(PQgetvalue(res, i, i_oid));
AssignDumpId(&srvinfo[i].dobj);
srvinfo[i].dobj.name = strdup(PQgetvalue(res, i, i_srvname));