mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-09-03 06:27:18 +02:00
Fix core dump in pg_dump --binary-upgrade on zero-column composite type.
This reverts nearly all of commit 28f6cab61a
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.
This commit is contained in:
parent
4b3b44b141
commit
3205b30bb7
@ -8978,7 +8978,6 @@ dumpCompositeType(Archive *fout, TypeInfo *tyinfo)
|
||||
int i_attalign;
|
||||
int i_attisdropped;
|
||||
int i_attcollation;
|
||||
int i_typrelid;
|
||||
int i;
|
||||
int actual_atts;
|
||||
|
||||
@ -8999,8 +8998,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 "
|
||||
@ -9018,8 +9016,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 "
|
||||
@ -9037,15 +9034,12 @@ 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(fout, q,
|
||||
tyinfo->dobj.catId.oid);
|
||||
binary_upgrade_set_pg_class_oids(fout, q, typrelid, false);
|
||||
binary_upgrade_set_pg_class_oids(fout, q, tyinfo->typrelid, false);
|
||||
}
|
||||
|
||||
qtypname = pg_strdup(fmtId(tyinfo->dobj.name));
|
||||
|
Loading…
Reference in New Issue
Block a user