From a53eeaddc3103a44dfc4dfb5d59dce86112e737c Mon Sep 17 00:00:00 2001 From: Alvaro Herrera Date: Wed, 11 Feb 2009 19:12:04 +0000 Subject: [PATCH] Improve psql \d+ to show TOAST reloptions too. Per complaint from ITAGAKI Takahiro. --- src/bin/psql/describe.c | 55 +++++++++++++++++++++++++++++++++-------- 1 file changed, 45 insertions(+), 10 deletions(-) diff --git a/src/bin/psql/describe.c b/src/bin/psql/describe.c index 3f6013cb73..4b9f57e13f 100644 --- a/src/bin/psql/describe.c +++ b/src/bin/psql/describe.c @@ -909,16 +909,51 @@ describeOneTableDetails(const char *schemaname, initPQExpBuffer(&tmpbuf); /* Get general table info */ - printfPQExpBuffer(&buf, - "SELECT relchecks, relkind, relhasindex, relhasrules, %s, " - "relhasoids" - "%s%s\n" - "FROM pg_catalog.pg_class WHERE oid = '%s'", - (pset.sversion >= 80400 ? "relhastriggers" : "reltriggers <> 0"), - (pset.sversion >= 80200 && verbose ? - ", pg_catalog.array_to_string(reloptions, E', ')" : ",''"), - (pset.sversion >= 80000 ? ", reltablespace" : ""), - oid); + if (pset.sversion >= 80400) + { + printfPQExpBuffer(&buf, + "SELECT c.relchecks, c.relkind, c.relhasindex, c.relhasrules, " + "c.relhastriggers, c.relhasoids, " + "%s, c.reltablespace\n" + "FROM pg_catalog.pg_class c\n " + "LEFT JOIN pg_catalog.pg_class tc ON (c.reltoastrelid = tc.oid)\n" + "WHERE c.oid = '%s'\n", + (verbose ? + "pg_catalog.array_to_string(c.reloptions || " + "array(select 'toast.' || x from pg_catalog.unnest(tc.reloptions) x), ', ')\n" + : "''"), + oid); + } + else if (pset.sversion >= 80200) + { + printfPQExpBuffer(&buf, + "SELECT relchecks, relkind, relhasindex, relhasrules, " + "reltriggers <> 0, relhasoids, " + "%s, reltablespace\n" + "FROM pg_catalog.pg_class WHERE oid = '%s'", + (verbose ? + "pg_catalog.array_to_string(reloptions, E', ')" : ",''"), + oid); + } + else if (pset.sversion >= 80000) + { + printfPQExpBuffer(&buf, + "SELECT relchecks, relkind, relhasindex, relhasrules, " + "reltriggers <> 0, relhasoids, " + "'', reltablespace\n" + "FROM pg_catalog.pg_class WHERE oid = '%s'", + oid); + } + else + { + printfPQExpBuffer(&buf, + "SELECT relchecks, relkind, relhasindex, relhasrules, " + "reltriggers <> 0, relhasoids, " + "'', ''\n" + "FROM pg_catalog.pg_class WHERE oid = '%s'", + oid); + } + res = PSQLexec(buf.data, false); if (!res) goto error_return; -- 2.39.5