diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/bin/pg_dump/pg_dump.c | 110 |
1 files changed, 39 insertions, 71 deletions
diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c index dc1d41dd8d2..3b36335aa67 100644 --- a/src/bin/pg_dump/pg_dump.c +++ b/src/bin/pg_dump/pg_dump.c @@ -10810,79 +10810,47 @@ dumpBaseType(Archive *fout, TypeInfo *tyinfo) bool typdefault_is_literal = false; /* Fetch type-specific details */ + appendPQExpBufferStr(query, "SELECT typlen, " + "typinput, typoutput, typreceive, typsend, " + "typreceive::pg_catalog.oid AS typreceiveoid, " + "typsend::pg_catalog.oid AS typsendoid, " + "typanalyze, " + "typanalyze::pg_catalog.oid AS typanalyzeoid, " + "typdelim, typbyval, typalign, typstorage, "); + + if (fout->remoteVersion >= 80300) + appendPQExpBufferStr(query, + "typmodin, typmodout, " + "typmodin::pg_catalog.oid AS typmodinoid, " + "typmodout::pg_catalog.oid AS typmodoutoid, "); + else + appendPQExpBufferStr(query, + "'-' AS typmodin, '-' AS typmodout, " + "0 AS typmodinoid, 0 AS typmodoutoid, "); + + if (fout->remoteVersion >= 80400) + appendPQExpBufferStr(query, + "typcategory, typispreferred, "); + else + appendPQExpBufferStr(query, + "'U' AS typcategory, false AS typispreferred, "); + if (fout->remoteVersion >= 90100) - { - appendPQExpBuffer(query, "SELECT typlen, " - "typinput, typoutput, typreceive, typsend, " - "typmodin, typmodout, typanalyze, " - "typreceive::pg_catalog.oid AS typreceiveoid, " - "typsend::pg_catalog.oid AS typsendoid, " - "typmodin::pg_catalog.oid AS typmodinoid, " - "typmodout::pg_catalog.oid AS typmodoutoid, " - "typanalyze::pg_catalog.oid AS typanalyzeoid, " - "typcategory, typispreferred, " - "typdelim, typbyval, typalign, typstorage, " - "(typcollation <> 0) AS typcollatable, " - "pg_catalog.pg_get_expr(typdefaultbin, 0) AS typdefaultbin, typdefault " - "FROM pg_catalog.pg_type " - "WHERE oid = '%u'::pg_catalog.oid", - tyinfo->dobj.catId.oid); - } - else if (fout->remoteVersion >= 80400) - { - appendPQExpBuffer(query, "SELECT typlen, " - "typinput, typoutput, typreceive, typsend, " - "typmodin, typmodout, typanalyze, " - "typreceive::pg_catalog.oid AS typreceiveoid, " - "typsend::pg_catalog.oid AS typsendoid, " - "typmodin::pg_catalog.oid AS typmodinoid, " - "typmodout::pg_catalog.oid AS typmodoutoid, " - "typanalyze::pg_catalog.oid AS typanalyzeoid, " - "typcategory, typispreferred, " - "typdelim, typbyval, typalign, typstorage, " - "false AS typcollatable, " - "pg_catalog.pg_get_expr(typdefaultbin, 0) AS typdefaultbin, typdefault " - "FROM pg_catalog.pg_type " - "WHERE oid = '%u'::pg_catalog.oid", - tyinfo->dobj.catId.oid); - } - else if (fout->remoteVersion >= 80300) - { - /* Before 8.4, pg_get_expr does not allow 0 for its second arg */ - appendPQExpBuffer(query, "SELECT typlen, " - "typinput, typoutput, typreceive, typsend, " - "typmodin, typmodout, typanalyze, " - "typreceive::pg_catalog.oid AS typreceiveoid, " - "typsend::pg_catalog.oid AS typsendoid, " - "typmodin::pg_catalog.oid AS typmodinoid, " - "typmodout::pg_catalog.oid AS typmodoutoid, " - "typanalyze::pg_catalog.oid AS typanalyzeoid, " - "'U' AS typcategory, false AS typispreferred, " - "typdelim, typbyval, typalign, typstorage, " - "false AS typcollatable, " - "pg_catalog.pg_get_expr(typdefaultbin, 'pg_catalog.pg_type'::pg_catalog.regclass) AS typdefaultbin, typdefault " - "FROM pg_catalog.pg_type " - "WHERE oid = '%u'::pg_catalog.oid", - tyinfo->dobj.catId.oid); - } + appendPQExpBufferStr(query, "(typcollation <> 0) AS typcollatable, "); else - { - appendPQExpBuffer(query, "SELECT typlen, " - "typinput, typoutput, typreceive, typsend, " - "'-' AS typmodin, '-' AS typmodout, " - "typanalyze, " - "typreceive::pg_catalog.oid AS typreceiveoid, " - "typsend::pg_catalog.oid AS typsendoid, " - "0 AS typmodinoid, 0 AS typmodoutoid, " - "typanalyze::pg_catalog.oid AS typanalyzeoid, " - "'U' AS typcategory, false AS typispreferred, " - "typdelim, typbyval, typalign, typstorage, " - "false AS typcollatable, " - "pg_catalog.pg_get_expr(typdefaultbin, 'pg_catalog.pg_type'::pg_catalog.regclass) AS typdefaultbin, typdefault " - "FROM pg_catalog.pg_type " - "WHERE oid = '%u'::pg_catalog.oid", - tyinfo->dobj.catId.oid); - } + appendPQExpBufferStr(query, "false AS typcollatable, "); + + /* Before 8.4, pg_get_expr does not allow 0 for its second arg */ + if (fout->remoteVersion >= 80400) + appendPQExpBufferStr(query, + "pg_catalog.pg_get_expr(typdefaultbin, 0) AS typdefaultbin, typdefault "); + else + appendPQExpBufferStr(query, + "pg_catalog.pg_get_expr(typdefaultbin, 'pg_catalog.pg_type'::pg_catalog.regclass) AS typdefaultbin, typdefault "); + + appendPQExpBuffer(query, "FROM pg_catalog.pg_type " + "WHERE oid = '%u'::pg_catalog.oid", + tyinfo->dobj.catId.oid); res = ExecuteSqlQueryForSingleRow(fout, query->data); |