diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2016-07-11 12:35:03 -0400 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2016-07-11 12:35:08 -0400 |
commit | a670c24c382693c4f75e99c9292b2ed0f0d40a72 (patch) | |
tree | 60d12835d23b84ca365e1be4d000aaf335cf0024 /src | |
parent | 740bf396a1d5cc41a8398076a9de1485c497c49c (diff) | |
download | postgresql-a670c24c382693c4f75e99c9292b2ed0f0d40a72.tar.gz postgresql-a670c24c382693c4f75e99c9292b2ed0f0d40a72.zip |
Improve output of psql's \df+ command.
Add display of proparallel (parallel-safety) when the server is >= 9.6,
and display of proacl (access privileges) for all server versions.
Minor tweak of column ordering to keep related columns together.
Michael Paquier
Discussion: <CAB7nPqTR3Vu3xKOZOYqSm-+bSZV0kqgeGAXD6w5GLbkbfd5Q6w@mail.gmail.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/bin/psql/describe.c | 54 |
1 files changed, 41 insertions, 13 deletions
diff --git a/src/bin/psql/describe.c b/src/bin/psql/describe.c index 2cdc5acf302..27be10215bc 100644 --- a/src/bin/psql/describe.c +++ b/src/bin/psql/describe.c @@ -298,7 +298,10 @@ describeFunctions(const char *functypes, const char *pattern, bool verbose, bool PQExpBufferData buf; PGresult *res; printQueryOpt myopt = pset.popt; - static const bool translate_columns[] = {false, false, false, false, true, true, true, false, false, false, false}; + static const bool translate_columns[] = {false, false, false, false, true, true, true, false, true, false, false, false, false}; + + /* No "Parallel" column before 9.6 */ + static const bool translate_columns_pre_96[] = {false, false, false, false, true, true, false, true, false, false, false, false}; if (strlen(functypes) != strspn(functypes, "antwS+")) { @@ -410,28 +413,45 @@ describeFunctions(const char *functypes, const char *pattern, bool verbose, bool gettext_noop("Type")); if (verbose) + { appendPQExpBuffer(&buf, - ",\n CASE WHEN prosecdef THEN '%s' ELSE '%s' END AS \"%s\"" ",\n CASE\n" " WHEN p.provolatile = 'i' THEN '%s'\n" " WHEN p.provolatile = 's' THEN '%s'\n" " WHEN p.provolatile = 'v' THEN '%s'\n" - " END as \"%s\"" - ",\n pg_catalog.pg_get_userbyid(p.proowner) as \"%s\",\n" - " l.lanname as \"%s\",\n" - " p.prosrc as \"%s\",\n" - " pg_catalog.obj_description(p.oid, 'pg_proc') as \"%s\"", - gettext_noop("definer"), - gettext_noop("invoker"), - gettext_noop("Security"), + " END as \"%s\"", gettext_noop("immutable"), gettext_noop("stable"), gettext_noop("volatile"), - gettext_noop("Volatility"), + gettext_noop("Volatility")); + if (pset.sversion >= 90600) + appendPQExpBuffer(&buf, + ",\n CASE\n" + " WHEN p.proparallel = 'r' THEN '%s'\n" + " WHEN p.proparallel = 's' THEN '%s'\n" + " WHEN p.proparallel = 'u' THEN '%s'\n" + " END as \"%s\"", + gettext_noop("restricted"), + gettext_noop("safe"), + gettext_noop("unsafe"), + gettext_noop("Parallel")); + appendPQExpBuffer(&buf, + ",\n pg_catalog.pg_get_userbyid(p.proowner) as \"%s\"" + ",\n CASE WHEN prosecdef THEN '%s' ELSE '%s' END AS \"%s\"", gettext_noop("Owner"), + gettext_noop("definer"), + gettext_noop("invoker"), + gettext_noop("Security")); + appendPQExpBufferStr(&buf, ",\n "); + printACLColumn(&buf, "p.proacl"); + appendPQExpBuffer(&buf, + ",\n l.lanname as \"%s\"" + ",\n p.prosrc as \"%s\"" + ",\n pg_catalog.obj_description(p.oid, 'pg_proc') as \"%s\"", gettext_noop("Language"), gettext_noop("Source code"), gettext_noop("Description")); + } appendPQExpBufferStr(&buf, "\nFROM pg_catalog.pg_proc p" @@ -530,8 +550,16 @@ describeFunctions(const char *functypes, const char *pattern, bool verbose, bool myopt.nullPrint = NULL; myopt.title = _("List of functions"); myopt.translate_header = true; - myopt.translate_columns = translate_columns; - myopt.n_translate_columns = lengthof(translate_columns); + if (pset.sversion >= 90600) + { + myopt.translate_columns = translate_columns; + myopt.n_translate_columns = lengthof(translate_columns); + } + else + { + myopt.translate_columns = translate_columns_pre_96; + myopt.n_translate_columns = lengthof(translate_columns_pre_96); + } printQuery(res, &myopt, pset.queryFout, false, pset.logfile); |