David Fetter <da...@fetter.org> writes: > [ v7-0001-Show-detailed-relation-persistence-in-dt.patch ]
I looked this over and had a few suggestions, as per attached v8: * The persistence description values ought to be translatable, as is the usual practice in describe.c. This is slightly painful because it requires tweaking the translate_columns[] values in a non-constant way, but it's not that bad. * I dropped the "ELSE 'unknown'" bit in favor of just emitting NULL if the persistence isn't recognized. This is the same way that the table-type CASE just above does it, and I see no reason to be different. Moreover, there are message-style-guidelines issues with what to print if you do want to print something; "unknown" doesn't cut it. * I also dropped the logic for pre-9.1 servers, because the existing precedent in describeOneTableDetails() is that we only consider relpersistence for >= 9.1, and I don't see a real good reason to deviate from that. 9.0 and before are long out of support anyway. If there aren't objections, I think v8 is committable. regards, tom lane
diff --git a/src/bin/psql/describe.c b/src/bin/psql/describe.c index 1c770b4..0e0af5f 100644 --- a/src/bin/psql/describe.c +++ b/src/bin/psql/describe.c @@ -3632,7 +3632,8 @@ listTables(const char *tabtypes, const char *pattern, bool verbose, bool showSys PQExpBufferData buf; PGresult *res; printQueryOpt myopt = pset.popt; - static const bool translate_columns[] = {false, false, true, false, false, false, false}; + int cols_so_far; + bool translate_columns[] = {false, false, true, false, false, false, false, false}; /* If tabtypes is empty, we default to \dtvmsE (but see also command.c) */ if (!(showTables || showIndexes || showViews || showMatViews || showSeq || showForeign)) @@ -3672,15 +3673,40 @@ listTables(const char *tabtypes, const char *pattern, bool verbose, bool showSys gettext_noop("partitioned index"), gettext_noop("Type"), gettext_noop("Owner")); + cols_so_far = 4; if (showIndexes) + { appendPQExpBuffer(&buf, - ",\n c2.relname as \"%s\"", + ",\n c2.relname as \"%s\"", gettext_noop("Table")); + cols_so_far++; + } if (verbose) { /* + * Show whether a relation is permanent, temporary, or unlogged. Like + * describeOneTableDetails(), we consider that persistence emerged in + * v9.1, even though related concepts existed before. + */ + if (pset.sversion >= 90100) + { + appendPQExpBuffer(&buf, + ",\n CASE c.relpersistence WHEN 'p' THEN '%s' WHEN 't' THEN '%s' WHEN 'u' THEN '%s' END as \"%s\"", + gettext_noop("permanent"), + gettext_noop("temporary"), + gettext_noop("unlogged"), + gettext_noop("Persistence")); + translate_columns[cols_so_far] = true; + } + + /* + * We don't bother to count cols_so_far below here, as there's no need + * to; this might change with future additions to the output columns. + */ + + /* * As of PostgreSQL 9.0, use pg_table_size() to show a more accurate * size of a table, including FSM, VM and TOAST tables. */