aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2014-10-17 12:49:11 -0400
committerTom Lane <tgl@sss.pgh.pa.us>2014-10-17 12:49:11 -0400
commit0c9391e529c47716274a02e799b587ad108004f7 (patch)
tree33846e1107dad680b106c8d576bc511044a3922c /src
parent2784b68b32bbab617f6a078e9d8d974b1aba25da (diff)
downloadpostgresql-0c9391e529c47716274a02e799b587ad108004f7.tar.gz
postgresql-0c9391e529c47716274a02e799b587ad108004f7.zip
Fix core dump in pg_dump --binary-upgrade on zero-column composite type.
This reverts nearly all of commit 28f6cab61ab8958b1a7dfb019724687d92722538 in favor of just using the typrelid we already have in pg_dump's TypeInfo struct for the composite type. As coded, it'd crash if the composite type had no attributes, since then the query would return no rows. Back-patch to all supported versions. It seems to not really be a problem in 9.0 because that version rejects the syntax "create type t as ()", but we might as well keep the logic similar in all affected branches. Report and fix by Rushabh Lathia.
Diffstat (limited to 'src')
-rw-r--r--src/bin/pg_dump/pg_dump.c12
1 files changed, 3 insertions, 9 deletions
diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c
index c5f3bc14476..4f9938a6acf 100644
--- a/src/bin/pg_dump/pg_dump.c
+++ b/src/bin/pg_dump/pg_dump.c
@@ -8085,7 +8085,6 @@ dumpCompositeType(Archive *fout, TypeInfo *tyinfo)
int i_attalign;
int i_attisdropped;
int i_attcollation;
- int i_typrelid;
int i;
int actual_atts;
@@ -8106,8 +8105,7 @@ dumpCompositeType(Archive *fout, TypeInfo *tyinfo)
"pg_catalog.format_type(a.atttypid, a.atttypmod) AS atttypdefn, "
"a.attlen, a.attalign, a.attisdropped, "
"CASE WHEN a.attcollation <> at.typcollation "
- "THEN a.attcollation ELSE 0 END AS attcollation, "
- "ct.typrelid "
+ "THEN a.attcollation ELSE 0 END AS attcollation "
"FROM pg_catalog.pg_type ct "
"JOIN pg_catalog.pg_attribute a ON a.attrelid = ct.typrelid "
"LEFT JOIN pg_catalog.pg_type at ON at.oid = a.atttypid "
@@ -8125,8 +8123,7 @@ dumpCompositeType(Archive *fout, TypeInfo *tyinfo)
appendPQExpBuffer(query, "SELECT a.attname, "
"pg_catalog.format_type(a.atttypid, a.atttypmod) AS atttypdefn, "
"a.attlen, a.attalign, a.attisdropped, "
- "0 AS attcollation, "
- "ct.typrelid "
+ "0 AS attcollation "
"FROM pg_catalog.pg_type ct, pg_catalog.pg_attribute a "
"WHERE ct.oid = '%u'::pg_catalog.oid "
"AND a.attrelid = ct.typrelid "
@@ -8145,14 +8142,11 @@ dumpCompositeType(Archive *fout, TypeInfo *tyinfo)
i_attalign = PQfnumber(res, "attalign");
i_attisdropped = PQfnumber(res, "attisdropped");
i_attcollation = PQfnumber(res, "attcollation");
- i_typrelid = PQfnumber(res, "typrelid");
if (binary_upgrade)
{
- Oid typrelid = atooid(PQgetvalue(res, 0, i_typrelid));
-
binary_upgrade_set_type_oids_by_type_oid(q, tyinfo->dobj.catId.oid);
- binary_upgrade_set_pg_class_oids(q, typrelid, false);
+ binary_upgrade_set_pg_class_oids(q, tyinfo->typrelid, false);
}
appendPQExpBuffer(q, "CREATE TYPE %s AS (",