From 787020fd3d6093a55e681495fb0e5ccbd57fa968 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 | 57 +++++++++++++++++++++++++++++++++-------- 1 file changed, 46 insertions(+), 11 deletions(-) diff --git a/src/bin/psql/describe.c b/src/bin/psql/describe.c index 8414d1bff4..ec5760c531 100644 --- a/src/bin/psql/describe.c +++ b/src/bin/psql/describe.c @@ -8,7 +8,7 @@ * * Copyright (c) 2000-2009, PostgreSQL Global Development Group * - * $PostgreSQL: pgsql/src/bin/psql/describe.c,v 1.198 2009/01/22 20:16:08 tgl Exp $ + * $PostgreSQL: pgsql/src/bin/psql/describe.c,v 1.199 2009/02/11 19:12:04 alvherre Exp $ */ #include "postgres_fe.h" @@ -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.40.0