aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/bin/pg_dump/pg_dump.c20
-rw-r--r--src/bin/pg_dump/pg_dump.h1
2 files changed, 9 insertions, 12 deletions
diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c
index f7720ad53b7..dacb033e989 100644
--- a/src/bin/pg_dump/pg_dump.c
+++ b/src/bin/pg_dump/pg_dump.c
@@ -5412,23 +5412,15 @@ binary_upgrade_set_type_oids_by_type_oid(Archive *fout,
Oid pg_type_array_oid;
Oid pg_type_multirange_oid;
Oid pg_type_multirange_array_oid;
+ TypeInfo *tinfo;
appendPQExpBufferStr(upgrade_buffer, "\n-- For binary upgrade, must preserve pg_type oid\n");
appendPQExpBuffer(upgrade_buffer,
"SELECT pg_catalog.binary_upgrade_set_next_pg_type_oid('%u'::pg_catalog.oid);\n\n",
pg_type_oid);
- appendPQExpBuffer(upgrade_query,
- "SELECT typarray "
- "FROM pg_catalog.pg_type "
- "WHERE oid = '%u'::pg_catalog.oid;",
- pg_type_oid);
-
- res = ExecuteSqlQueryForSingleRow(fout, upgrade_query->data);
-
- pg_type_array_oid = atooid(PQgetvalue(res, 0, PQfnumber(res, "typarray")));
-
- PQclear(res);
+ tinfo = findTypeByOid(pg_type_oid);
+ pg_type_array_oid = tinfo->typarray;
if (!OidIsValid(pg_type_array_oid) && force_array_type)
pg_type_array_oid = get_next_possible_free_pg_type_oid(fout, upgrade_query);
@@ -5910,6 +5902,7 @@ getTypes(Archive *fout)
int i_typtype;
int i_typisdefined;
int i_isarray;
+ int i_typarray;
/*
* we include even the built-in types because those may be used as array
@@ -5930,7 +5923,7 @@ getTypes(Archive *fout)
"typnamespace, typacl, "
"acldefault('T', typowner) AS acldefault, "
"typowner, "
- "typelem, typrelid, "
+ "typelem, typrelid, typarray, "
"CASE WHEN typrelid = 0 THEN ' '::\"char\" "
"ELSE (SELECT relkind FROM pg_class WHERE oid = typrelid) END AS typrelkind, "
"typtype, typisdefined, "
@@ -5957,6 +5950,7 @@ getTypes(Archive *fout)
i_typtype = PQfnumber(res, "typtype");
i_typisdefined = PQfnumber(res, "typisdefined");
i_isarray = PQfnumber(res, "isarray");
+ i_typarray = PQfnumber(res, "typarray");
for (i = 0; i < ntups; i++)
{
@@ -5989,6 +5983,8 @@ getTypes(Archive *fout)
else
tyinfo[i].isArray = false;
+ tyinfo[i].typarray = atooid(PQgetvalue(res, i, i_typarray));
+
if (tyinfo[i].typtype == TYPTYPE_MULTIRANGE)
tyinfo[i].isMultirange = true;
else
diff --git a/src/bin/pg_dump/pg_dump.h b/src/bin/pg_dump/pg_dump.h
index 4b2e5870a9c..0b7d21b2e9b 100644
--- a/src/bin/pg_dump/pg_dump.h
+++ b/src/bin/pg_dump/pg_dump.h
@@ -200,6 +200,7 @@ typedef struct _typeInfo
const char *rolname;
Oid typelem;
Oid typrelid;
+ Oid typarray;
char typrelkind; /* 'r', 'v', 'c', etc */
char typtype; /* 'b', 'c', etc */
bool isArray; /* true if auto-generated array type */