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.
This commit is contained in:
parent
870a980aaf
commit
31021e7ba3
@ -7309,7 +7309,6 @@ dumpCompositeType(Archive *fout, TypeInfo *tyinfo)
|
|||||||
int ntups;
|
int ntups;
|
||||||
int i_attname;
|
int i_attname;
|
||||||
int i_atttypdefn;
|
int i_atttypdefn;
|
||||||
int i_typrelid;
|
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
/* Set proper schema search path so type references list correctly */
|
/* Set proper schema search path so type references list correctly */
|
||||||
@ -7319,8 +7318,7 @@ dumpCompositeType(Archive *fout, TypeInfo *tyinfo)
|
|||||||
/* We assume here that remoteVersion must be at least 70300 */
|
/* We assume here that remoteVersion must be at least 70300 */
|
||||||
|
|
||||||
appendPQExpBuffer(query, "SELECT a.attname, "
|
appendPQExpBuffer(query, "SELECT a.attname, "
|
||||||
"pg_catalog.format_type(a.atttypid, a.atttypmod) AS atttypdefn, "
|
"pg_catalog.format_type(a.atttypid, a.atttypmod) AS atttypdefn "
|
||||||
"typrelid "
|
|
||||||
"FROM pg_catalog.pg_type t, pg_catalog.pg_attribute a "
|
"FROM pg_catalog.pg_type t, pg_catalog.pg_attribute a "
|
||||||
"WHERE t.oid = '%u'::pg_catalog.oid "
|
"WHERE t.oid = '%u'::pg_catalog.oid "
|
||||||
"AND a.attrelid = t.typrelid "
|
"AND a.attrelid = t.typrelid "
|
||||||
@ -7341,14 +7339,11 @@ dumpCompositeType(Archive *fout, TypeInfo *tyinfo)
|
|||||||
|
|
||||||
i_attname = PQfnumber(res, "attname");
|
i_attname = PQfnumber(res, "attname");
|
||||||
i_atttypdefn = PQfnumber(res, "atttypdefn");
|
i_atttypdefn = PQfnumber(res, "atttypdefn");
|
||||||
i_typrelid = PQfnumber(res, "typrelid");
|
|
||||||
|
|
||||||
if (binary_upgrade)
|
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_type_oids_by_type_oid(q, tyinfo->dobj.catId.oid);
|
||||||
binary_upgrade_set_relfilenodes(q, typrelid, false);
|
binary_upgrade_set_relfilenodes(q, tyinfo->typrelid, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
appendPQExpBuffer(q, "CREATE TYPE %s AS (",
|
appendPQExpBuffer(q, "CREATE TYPE %s AS (",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user