Re: Adding comments to help understand psql hidden queries - Mailing list pgsql-hackers
| From | Tom Lane |
|---|---|
| Subject | Re: Adding comments to help understand psql hidden queries |
| Date | |
| Msg-id | 3616299.1774287304@sss.pgh.pa.us Whole thread Raw |
| In response to | Re: Adding comments to help understand psql hidden queries (Greg Sabino Mullane <htamfids@gmail.com>) |
| Responses |
Re: Adding comments to help understand psql hidden queries
|
| List | pgsql-hackers |
Greg Sabino Mullane <htamfids@gmail.com> writes:
> Going back through all the feedback and comments, plus having some time to
> think things through, I am including a new patch, v7, that greatly
> simplifies things, and only makes changes inside of describe.c. In the
> spirit of not letting the perfect be the enemy of the good, I'm not
> worrying at all about the number of stars, or the width, and simply adding
> a small consistent description at the top of each query. I also realized
> that having these queries show up in someone's server log could be quite
> confusing, so I had them output as part of the query itself. In other
> words, they show up in both psql -E and the server logs.
I like this proposal quite a lot. It seems like about the right level
of development/maintenance effort, and I think it provides a useful
increment of usability.
I have one slightly-orthogonal suggestion. I think that we should
make the header for generated queries be different from that used
for user queries in psql's logfile mode. Right now those are both
/******** QUERY *********/
I propose instead printing
/**** INTERNAL QUERY ****/
if it's a generated query.
I went through the 0007 patch and made some editorial changes
beyond that addition. I fixed a couple more internal queries
to have headers (now each PSQLexec in describe.c has one).
I also changed some of Greg's proposed headers in hopes of
improving uniformity. Notably, I didn't like that some of the
headers said "table" and some said "relation". I made them all
say "table", although you could certainly argue for the opposite.
This is all in-the-eye-of-the-beholder, so feel free to push back
on any changes you don't like.
For ease of review, v8-0001 attached is identical to Greg's 0007,
and v8-0002 is my proposed changes on top of that.
regards, tom lane
From e9cfadb90977f446c41430793139a8fb5e7efcb9 Mon Sep 17 00:00:00 2001
From: Greg Sabino Mullane <greg@turnstep.com>
Date: Sun, 22 Mar 2026 11:06:01 -0400
Subject: [PATCH v8 1/2] Add comment header for generated SQL inside psql
---
src/bin/psql/describe.c | 265 ++++++++++++++++++++++++++--------------
1 file changed, 176 insertions(+), 89 deletions(-)
diff --git a/src/bin/psql/describe.c b/src/bin/psql/describe.c
index eafb33143d9..f09cd49850c 100644
--- a/src/bin/psql/describe.c
+++ b/src/bin/psql/describe.c
@@ -84,7 +84,8 @@ describeAggregates(const char *pattern, bool verbose, bool showSystem)
initPQExpBuffer(&buf);
- printfPQExpBuffer(&buf,
+ printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching aggregates"));
+ appendPQExpBuffer(&buf,
"SELECT n.nspname as \"%s\",\n"
" p.proname AS \"%s\",\n"
" pg_catalog.format_type(p.prorettype, NULL) AS \"%s\",\n"
@@ -165,7 +166,8 @@ describeAccessMethods(const char *pattern, bool verbose)
initPQExpBuffer(&buf);
- printfPQExpBuffer(&buf,
+ printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching access methods"));
+ appendPQExpBuffer(&buf,
"SELECT amname AS \"%s\",\n"
" CASE amtype"
" WHEN " CppAsString2(AMTYPE_INDEX) " THEN '%s'"
@@ -228,7 +230,8 @@ describeTablespaces(const char *pattern, bool verbose)
initPQExpBuffer(&buf);
- printfPQExpBuffer(&buf,
+ printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching tablespaces"));
+ appendPQExpBuffer(&buf,
"SELECT spcname AS \"%s\",\n"
" pg_catalog.pg_get_userbyid(spcowner) AS \"%s\",\n"
" pg_catalog.pg_tablespace_location(oid) AS \"%s\"",
@@ -338,7 +341,8 @@ describeFunctions(const char *functypes, const char *func_pattern,
initPQExpBuffer(&buf);
- printfPQExpBuffer(&buf,
+ printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching functions"));
+ appendPQExpBuffer(&buf,
"SELECT n.nspname as \"%s\",\n"
" p.proname as \"%s\",\n",
gettext_noop("Schema"),
@@ -645,7 +649,8 @@ describeTypes(const char *pattern, bool verbose, bool showSystem)
initPQExpBuffer(&buf);
- printfPQExpBuffer(&buf,
+ printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching types"));
+ appendPQExpBuffer(&buf,
"SELECT n.nspname as \"%s\",\n"
" pg_catalog.format_type(t.oid, NULL) AS \"%s\",\n",
gettext_noop("Schema"),
@@ -819,7 +824,8 @@ describeOperators(const char *oper_pattern,
* to pre-v14 servers.
*/
- printfPQExpBuffer(&buf,
+ printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching operators"));
+ appendPQExpBuffer(&buf,
"SELECT n.nspname as \"%s\",\n"
" o.oprname AS \"%s\",\n"
" CASE WHEN o.oprkind='l' THEN NULL ELSE pg_catalog.format_type(o.oprleft, NULL) END AS
\"%s\",\n"
@@ -952,7 +958,8 @@ listAllDbs(const char *pattern, bool verbose)
initPQExpBuffer(&buf);
- printfPQExpBuffer(&buf,
+ printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching databases"));
+ appendPQExpBuffer(&buf,
"SELECT\n"
" d.datname as \"%s\",\n"
" pg_catalog.pg_get_userbyid(d.datdba) as \"%s\",\n"
@@ -1060,7 +1067,8 @@ permissionsList(const char *pattern, bool showSystem)
/*
* we ignore indexes and toast tables since they have no meaningful rights
*/
- printfPQExpBuffer(&buf,
+ printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching access privileges"));
+ appendPQExpBuffer(&buf,
"SELECT n.nspname as \"%s\",\n"
" c.relname as \"%s\",\n"
" CASE c.relkind"
@@ -1224,7 +1232,8 @@ listDefaultACLs(const char *pattern)
initPQExpBuffer(&buf);
- printfPQExpBuffer(&buf,
+ printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching default ACLs"));
+ appendPQExpBuffer(&buf,
"SELECT pg_catalog.pg_get_userbyid(d.defaclrole) AS \"%s\",\n"
" n.nspname AS \"%s\",\n"
" CASE d.defaclobjtype "
@@ -1305,6 +1314,7 @@ objectDescription(const char *pattern, bool showSystem)
initPQExpBuffer(&buf);
+ printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching object comments"));
appendPQExpBuffer(&buf,
"SELECT DISTINCT tt.nspname AS \"%s\", tt.name AS \"%s\", tt.object AS \"%s\", d.description AS
\"%s\"\n"
"FROM (\n",
@@ -1497,7 +1507,8 @@ describeTableDetails(const char *pattern, bool verbose, bool showSystem)
initPQExpBuffer(&buf);
- printfPQExpBuffer(&buf,
+ printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching relations to describe"));
+ appendPQExpBuffer(&buf,
"SELECT c.oid,\n"
" n.nspname,\n"
" c.relname\n"
@@ -1633,9 +1644,10 @@ describeOneTableDetails(const char *schemaname,
initPQExpBuffer(&tmpbuf);
/* Get general table info */
+ printfPQExpBuffer(&buf, "/* %s */\n", _("Get general relation information"));
if (pset.sversion >= 120000)
{
- printfPQExpBuffer(&buf,
+ appendPQExpBuffer(&buf,
"SELECT c.relchecks, c.relkind, c.relhasindex, c.relhasrules, "
"c.relhastriggers, c.relrowsecurity, c.relforcerowsecurity, "
"false AS relhasoids, c.relispartition, %s, c.reltablespace, "
@@ -1653,7 +1665,7 @@ describeOneTableDetails(const char *schemaname,
}
else if (pset.sversion >= 100000)
{
- printfPQExpBuffer(&buf,
+ appendPQExpBuffer(&buf,
"SELECT c.relchecks, c.relkind, c.relhasindex, c.relhasrules, "
"c.relhastriggers, c.relrowsecurity, c.relforcerowsecurity, "
"c.relhasoids, c.relispartition, %s, c.reltablespace, "
@@ -1670,7 +1682,7 @@ describeOneTableDetails(const char *schemaname,
}
else if (pset.sversion >= 90500)
{
- printfPQExpBuffer(&buf,
+ appendPQExpBuffer(&buf,
"SELECT c.relchecks, c.relkind, c.relhasindex, c.relhasrules, "
"c.relhastriggers, c.relrowsecurity, c.relforcerowsecurity, "
"c.relhasoids, false as relispartition, %s, c.reltablespace, "
@@ -1687,7 +1699,7 @@ describeOneTableDetails(const char *schemaname,
}
else if (pset.sversion >= 90400)
{
- printfPQExpBuffer(&buf,
+ appendPQExpBuffer(&buf,
"SELECT c.relchecks, c.relkind, c.relhasindex, c.relhasrules, "
"c.relhastriggers, false, false, c.relhasoids, "
"false as relispartition, %s, c.reltablespace, "
@@ -1704,7 +1716,7 @@ describeOneTableDetails(const char *schemaname,
}
else
{
- printfPQExpBuffer(&buf,
+ appendPQExpBuffer(&buf,
"SELECT c.relchecks, c.relkind, c.relhasindex, c.relhasrules, "
"c.relhastriggers, false, false, c.relhasoids, "
"false as relispartition, %s, c.reltablespace, "
@@ -1765,9 +1777,10 @@ describeOneTableDetails(const char *schemaname,
printQueryOpt myopt = pset.popt;
char *footers[3] = {NULL, NULL, NULL};
+ printfPQExpBuffer(&buf, "/* %s */\n", _("Get sequence information"));
if (pset.sversion >= 100000)
{
- printfPQExpBuffer(&buf,
+ appendPQExpBuffer(&buf,
"SELECT pg_catalog.format_type(seqtypid, NULL) AS \"%s\",\n"
" seqstart AS \"%s\",\n"
" seqmin AS \"%s\",\n"
@@ -1791,7 +1804,7 @@ describeOneTableDetails(const char *schemaname,
}
else
{
- printfPQExpBuffer(&buf,
+ appendPQExpBuffer(&buf,
"SELECT 'bigint' AS \"%s\",\n"
" start_value AS \"%s\",\n"
" min_value AS \"%s\",\n"
@@ -1818,7 +1831,8 @@ describeOneTableDetails(const char *schemaname,
goto error_return;
/* Get the column that owns this sequence */
- printfPQExpBuffer(&buf, "SELECT pg_catalog.quote_ident(nspname) || '.' ||"
+ printfPQExpBuffer(&buf, "/* %s */\n", _("Get the column that owns this sequence"));
+ appendPQExpBuffer(&buf, "SELECT pg_catalog.quote_ident(nspname) || '.' ||"
"\n pg_catalog.quote_ident(relname) || '.' ||"
"\n pg_catalog.quote_ident(attname),"
"\n d.deptype"
@@ -1862,7 +1876,8 @@ describeOneTableDetails(const char *schemaname,
/* Print any publications */
if (pset.sversion >= 190000)
{
- printfPQExpBuffer(&buf, "SELECT pubname FROM pg_catalog.pg_publication p"
+ printfPQExpBuffer(&buf, "/* %s */\n", _("Get publications containing this sequence"));
+ appendPQExpBuffer(&buf, "SELECT pubname FROM pg_catalog.pg_publication p"
"\nWHERE p.puballsequences"
"\n AND pg_catalog.pg_relation_is_publishable('%s')"
"\nORDER BY 1",
@@ -1921,7 +1936,8 @@ describeOneTableDetails(const char *schemaname,
printQueryOpt myopt = pset.popt;
char *footers[3] = {NULL, NULL, NULL};
- printfPQExpBuffer(&buf,
+ printfPQExpBuffer(&buf, "/* %s */\n", _("Get property graph information"));
+ appendPQExpBuffer(&buf,
"SELECT e.pgealias AS \"%s\","
"\n pg_catalog.quote_ident(n.nspname) || '.' ||"
"\n pg_catalog.quote_ident(c.relname) AS \"%s\","
@@ -2003,7 +2019,8 @@ describeOneTableDetails(const char *schemaname,
* duplicative test logic below.
*/
cols = 0;
- printfPQExpBuffer(&buf, "SELECT a.attname");
+ printfPQExpBuffer(&buf, "/* %s */\n", _("Get columns for this relation"));
+ appendPQExpBuffer(&buf, "SELECT a.attname");
attname_col = cols++;
appendPQExpBufferStr(&buf, ",\n pg_catalog.format_type(a.atttypid, a.atttypmod)");
atttype_col = cols++;
@@ -2305,7 +2322,8 @@ describeOneTableDetails(const char *schemaname,
/* Footer information for a partition child table */
PGresult *result;
- printfPQExpBuffer(&buf,
+ printfPQExpBuffer(&buf, "/* %s */\n", _("Get partition information for this table"));
+ appendPQExpBuffer(&buf,
"SELECT inhparent::pg_catalog.regclass,\n"
" pg_catalog.pg_get_expr(c.relpartbound, c.oid),\n ");
@@ -2382,7 +2400,8 @@ describeOneTableDetails(const char *schemaname,
/* For a TOAST table, print name of owning table */
PGresult *result;
- printfPQExpBuffer(&buf,
+ printfPQExpBuffer(&buf, "/* %s */\n", _("Get the table which owns this TOAST table"));
+ appendPQExpBuffer(&buf,
"SELECT n.nspname, c.relname\n"
"FROM pg_catalog.pg_class c"
" JOIN pg_catalog.pg_namespace n"
@@ -2410,7 +2429,8 @@ describeOneTableDetails(const char *schemaname,
/* Footer information about an index */
PGresult *result;
- printfPQExpBuffer(&buf,
+ printfPQExpBuffer(&buf, "/* %s */\n", _("Get index details"));
+ appendPQExpBuffer(&buf,
"SELECT i.indisunique, i.indisprimary, i.indisclustered, "
"i.indisvalid,\n"
" (NOT i.indimmediate) AND "
@@ -2531,7 +2551,8 @@ describeOneTableDetails(const char *schemaname,
/* print indexes */
if (tableinfo.hasindex)
{
- printfPQExpBuffer(&buf,
+ printfPQExpBuffer(&buf, "/* %s */\n", _("Get indexes for this table"));
+ appendPQExpBuffer(&buf,
"SELECT c2.relname, i.indisprimary, i.indisunique, "
"i.indisclustered, i.indisvalid, "
"pg_catalog.pg_get_indexdef(i.indexrelid, 0, true),\n "
@@ -2635,7 +2656,9 @@ describeOneTableDetails(const char *schemaname,
/* print table (and column) check constraints */
if (tableinfo.checks)
{
- printfPQExpBuffer(&buf,
+
+ printfPQExpBuffer(&buf, "/* %s */\n", _("Get check constraints"));
+ appendPQExpBuffer(&buf,
"SELECT r.conname, "
"pg_catalog.pg_get_constraintdef(r.oid, true)\n"
"FROM pg_catalog.pg_constraint r\n"
@@ -2666,6 +2689,7 @@ describeOneTableDetails(const char *schemaname,
}
/* Print foreign-key constraints */
+ printfPQExpBuffer(&buf, "/* %s */\n", _("Get foreign key constraints"));
if (pset.sversion >= 120000 &&
(tableinfo.ispartition || tableinfo.relkind == RELKIND_PARTITIONED_TABLE))
{
@@ -2673,7 +2697,7 @@ describeOneTableDetails(const char *schemaname,
* Put the constraints defined in this table first, followed by
* the constraints defined in ancestor partitioned tables.
*/
- printfPQExpBuffer(&buf,
+ appendPQExpBuffer(&buf,
"SELECT conrelid = '%s'::pg_catalog.regclass AS sametable,\n"
" conname,\n"
" pg_catalog.pg_get_constraintdef(oid, true) AS condef,\n"
@@ -2686,7 +2710,7 @@ describeOneTableDetails(const char *schemaname,
}
else
{
- printfPQExpBuffer(&buf,
+ appendPQExpBuffer(&buf,
"SELECT true as sametable, conname,\n"
" pg_catalog.pg_get_constraintdef(r.oid, true) as condef,\n"
" conrelid::pg_catalog.regclass AS ontable\n"
@@ -2736,9 +2760,10 @@ describeOneTableDetails(const char *schemaname,
PQclear(result);
/* print incoming foreign-key references */
+ printfPQExpBuffer(&buf, "/* %s */\n", _("Get foreign keys referencing this table"));
if (pset.sversion >= 120000)
{
- printfPQExpBuffer(&buf,
+ appendPQExpBuffer(&buf,
"SELECT conname, conrelid::pg_catalog.regclass AS ontable,\n"
" pg_catalog.pg_get_constraintdef(oid, true) AS condef\n"
" FROM pg_catalog.pg_constraint c\n"
@@ -2750,7 +2775,7 @@ describeOneTableDetails(const char *schemaname,
}
else
{
- printfPQExpBuffer(&buf,
+ appendPQExpBuffer(&buf,
"SELECT conname, conrelid::pg_catalog.regclass AS ontable,\n"
" pg_catalog.pg_get_constraintdef(oid, true) AS condef\n"
" FROM pg_catalog.pg_constraint\n"
@@ -2787,7 +2812,8 @@ describeOneTableDetails(const char *schemaname,
/* print any row-level policies */
if (pset.sversion >= 90500)
{
- printfPQExpBuffer(&buf, "SELECT pol.polname,");
+ printfPQExpBuffer(&buf, "/* %s */\n", _("Get row-level policies for this table"));
+ appendPQExpBuffer(&buf, "SELECT pol.polname,");
if (pset.sversion >= 100000)
appendPQExpBufferStr(&buf,
" pol.polpermissive,\n");
@@ -2867,9 +2893,10 @@ describeOneTableDetails(const char *schemaname,
}
/* print any extended statistics */
+ printfPQExpBuffer(&buf, "/* %s */\n", _("Get extended statistics for this table"));
if (pset.sversion >= 140000)
{
- printfPQExpBuffer(&buf,
+ appendPQExpBuffer(&buf,
"SELECT oid, "
"stxrelid::pg_catalog.regclass, "
"stxnamespace::pg_catalog.regnamespace::pg_catalog.text AS nsp, "
@@ -2967,7 +2994,7 @@ describeOneTableDetails(const char *schemaname,
}
else if (pset.sversion >= 100000)
{
- printfPQExpBuffer(&buf,
+ appendPQExpBuffer(&buf,
"SELECT oid, "
"stxrelid::pg_catalog.regclass, "
"stxnamespace::pg_catalog.regnamespace AS nsp, "
@@ -3046,7 +3073,8 @@ describeOneTableDetails(const char *schemaname,
/* print rules */
if (tableinfo.hasrules && tableinfo.relkind != RELKIND_MATVIEW)
{
- printfPQExpBuffer(&buf,
+ printfPQExpBuffer(&buf, "/* %s */\n", _("Get rules for this table"));
+ appendPQExpBuffer(&buf,
"SELECT r.rulename, trim(trailing ';' from pg_catalog.pg_get_ruledef(r.oid, true)), "
"ev_enabled\n"
"FROM pg_catalog.pg_rewrite r\n"
@@ -3129,9 +3157,10 @@ describeOneTableDetails(const char *schemaname,
/* print any publications */
if (pset.sversion >= 100000)
{
+ printfPQExpBuffer(&buf, "/* %s */\n", _("Get publications that use this table"));
if (pset.sversion >= 150000)
{
- printfPQExpBuffer(&buf,
+ appendPQExpBuffer(&buf,
"SELECT pubname\n"
" , NULL\n"
" , NULL\n"
@@ -3191,7 +3220,7 @@ describeOneTableDetails(const char *schemaname,
}
else
{
- printfPQExpBuffer(&buf,
+ appendPQExpBuffer(&buf,
"SELECT pubname\n"
" , NULL\n"
" , NULL\n"
@@ -3241,7 +3270,8 @@ describeOneTableDetails(const char *schemaname,
/* Print publications where the table is in the EXCEPT clause */
if (pset.sversion >= 190000)
{
- printfPQExpBuffer(&buf,
+ printfPQExpBuffer(&buf, "/* %s */\n", _("Get publications that exclude this table"));
+ appendPQExpBuffer(&buf,
"SELECT pubname\n"
"FROM pg_catalog.pg_publication p\n"
"JOIN pg_catalog.pg_publication_rel pr ON p.oid = pr.prpubid\n"
@@ -3273,7 +3303,8 @@ describeOneTableDetails(const char *schemaname,
*/
if (verbose)
{
- printfPQExpBuffer(&buf,
+ printfPQExpBuffer(&buf, "/* %s */\n", _("Get not null constraints for this table"));
+ appendPQExpBuffer(&buf,
"SELECT c.conname, a.attname, c.connoinherit,\n"
" c.conislocal, c.coninhcount <> 0,\n"
" c.convalidated\n"
@@ -3346,7 +3377,8 @@ describeOneTableDetails(const char *schemaname,
/* print rules */
if (tableinfo.hasrules)
{
- printfPQExpBuffer(&buf,
+ printfPQExpBuffer(&buf, "/* %s */\n", _("Get rules for this view"));
+ appendPQExpBuffer(&buf,
"SELECT r.rulename, trim(trailing ';' from pg_catalog.pg_get_ruledef(r.oid, true))\n"
"FROM pg_catalog.pg_rewrite r\n"
"WHERE r.ev_class = '%s' AND r.rulename != '_RETURN' ORDER BY 1;",
@@ -3383,7 +3415,8 @@ describeOneTableDetails(const char *schemaname,
PGresult *result;
int tuples;
- printfPQExpBuffer(&buf,
+ printfPQExpBuffer(&buf, "/* %s */\n", _("Get triggers for this table"));
+ appendPQExpBuffer(&buf,
"SELECT t.tgname, "
"pg_catalog.pg_get_triggerdef(t.oid, true), "
"t.tgenabled, t.tgisinternal,\n");
@@ -3566,7 +3599,8 @@ describeOneTableDetails(const char *schemaname,
char *ftoptions;
/* Footer information about foreign table */
- printfPQExpBuffer(&buf,
+ printfPQExpBuffer(&buf, "/* %s */\n", _("Get foreign server"));
+ appendPQExpBuffer(&buf,
"SELECT s.srvname,\n"
" pg_catalog.array_to_string(ARRAY(\n"
" SELECT pg_catalog.quote_ident(option_name)"
@@ -3601,7 +3635,8 @@ describeOneTableDetails(const char *schemaname,
}
/* print tables inherited from (exclude partitioned parents) */
- printfPQExpBuffer(&buf,
+ printfPQExpBuffer(&buf, "/* %s */\n", _("Get parent tables"));
+ appendPQExpBuffer(&buf,
"SELECT c.oid::pg_catalog.regclass\n"
"FROM pg_catalog.pg_class c, pg_catalog.pg_inherits i\n"
"WHERE c.oid = i.inhparent AND i.inhrelid = '%s'\n"
@@ -3638,8 +3673,9 @@ describeOneTableDetails(const char *schemaname,
}
/* print child tables (with additional info if partitions) */
+ printfPQExpBuffer(&buf, "/* %s */\n", _("Get child tables"));
if (pset.sversion >= 140000)
- printfPQExpBuffer(&buf,
+ appendPQExpBuffer(&buf,
"SELECT c.oid::pg_catalog.regclass, c.relkind,"
" inhdetachpending,"
" pg_catalog.pg_get_expr(c.relpartbound, c.oid)\n"
@@ -3649,7 +3685,7 @@ describeOneTableDetails(const char *schemaname,
" c.oid::pg_catalog.regclass::pg_catalog.text;",
oid);
else if (pset.sversion >= 100000)
- printfPQExpBuffer(&buf,
+ appendPQExpBuffer(&buf,
"SELECT c.oid::pg_catalog.regclass, c.relkind,"
" false AS inhdetachpending,"
" pg_catalog.pg_get_expr(c.relpartbound, c.oid)\n"
@@ -3659,7 +3695,7 @@ describeOneTableDetails(const char *schemaname,
" c.oid::pg_catalog.regclass::pg_catalog.text;",
oid);
else
- printfPQExpBuffer(&buf,
+ appendPQExpBuffer(&buf,
"SELECT c.oid::pg_catalog.regclass, c.relkind,"
" false AS inhdetachpending, NULL\n"
"FROM pg_catalog.pg_class c, pg_catalog.pg_inherits i\n"
@@ -3894,7 +3930,8 @@ describeRoles(const char *pattern, bool verbose, bool showSystem)
initPQExpBuffer(&buf);
- printfPQExpBuffer(&buf,
+ printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching roles"));
+ appendPQExpBuffer(&buf,
"SELECT r.rolname, r.rolsuper, r.rolinherit,\n"
" r.rolcreaterole, r.rolcreatedb, r.rolcanlogin,\n"
" r.rolconnlimit, r.rolvaliduntil");
@@ -4033,7 +4070,8 @@ listDbRoleSettings(const char *pattern, const char *pattern2)
initPQExpBuffer(&buf);
- printfPQExpBuffer(&buf, "SELECT rolname AS \"%s\", datname AS \"%s\",\n"
+ printfPQExpBuffer(&buf, "/* %s */\n", _("Get per-database and per-role settings"));
+ appendPQExpBuffer(&buf, "SELECT rolname AS \"%s\", datname AS \"%s\",\n"
"pg_catalog.array_to_string(setconfig, E'\\n') AS \"%s\"\n"
"FROM pg_catalog.pg_db_role_setting s\n"
"LEFT JOIN pg_catalog.pg_database d ON d.oid = setdatabase\n"
@@ -4100,7 +4138,8 @@ describeRoleGrants(const char *pattern, bool showSystem)
printQueryOpt myopt = pset.popt;
initPQExpBuffer(&buf);
- printfPQExpBuffer(&buf,
+ printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching role grants"));
+ appendPQExpBuffer(&buf,
"SELECT m.rolname AS \"%s\", r.rolname AS \"%s\",\n"
" pg_catalog.concat_ws(', ',\n",
gettext_noop("Role name"),
@@ -4199,7 +4238,8 @@ listTables(const char *tabtypes, const char *pattern, bool verbose, bool showSys
initPQExpBuffer(&buf);
- printfPQExpBuffer(&buf,
+ printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching relations"));
+ appendPQExpBuffer(&buf,
"SELECT n.nspname as \"%s\",\n"
" c.relname as \"%s\",\n"
" CASE c.relkind"
@@ -4482,7 +4522,8 @@ listPartitionedTables(const char *reltypes, const char *pattern, bool verbose)
initPQExpBuffer(&buf);
- printfPQExpBuffer(&buf,
+ printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching partitioned tables"));
+ appendPQExpBuffer(&buf,
"SELECT n.nspname as \"%s\",\n"
" c.relname as \"%s\",\n"
" pg_catalog.pg_get_userbyid(c.relowner) as \"%s\"",
@@ -4657,7 +4698,8 @@ listLanguages(const char *pattern, bool verbose, bool showSystem)
initPQExpBuffer(&buf);
- printfPQExpBuffer(&buf,
+ printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching languages"));
+ appendPQExpBuffer(&buf,
"SELECT l.lanname AS \"%s\",\n"
" pg_catalog.pg_get_userbyid(l.lanowner) as \"%s\",\n"
" l.lanpltrusted AS \"%s\"",
@@ -4733,7 +4775,8 @@ listDomains(const char *pattern, bool verbose, bool showSystem)
initPQExpBuffer(&buf);
- printfPQExpBuffer(&buf,
+ printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching domains"));
+ appendPQExpBuffer(&buf,
"SELECT n.nspname as \"%s\",\n"
" t.typname as \"%s\",\n"
" pg_catalog.format_type(t.typbasetype, t.typtypmod) as \"%s\",\n"
@@ -4818,7 +4861,8 @@ listConversions(const char *pattern, bool verbose, bool showSystem)
initPQExpBuffer(&buf);
- printfPQExpBuffer(&buf,
+ printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching conversions"));
+ appendPQExpBuffer(&buf,
"SELECT n.nspname AS \"%s\",\n"
" c.conname AS \"%s\",\n"
" pg_catalog.pg_encoding_to_char(c.conforencoding) AS \"%s\",\n"
@@ -4896,7 +4940,9 @@ describeConfigurationParameters(const char *pattern, bool verbose,
printQueryOpt myopt = pset.popt;
initPQExpBuffer(&buf);
- printfPQExpBuffer(&buf,
+
+ printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching configuration parameters"));
+ appendPQExpBuffer(&buf,
"SELECT s.name AS \"%s\", "
"pg_catalog.current_setting(s.name) AS \"%s\"",
gettext_noop("Parameter"),
@@ -4976,7 +5022,8 @@ listEventTriggers(const char *pattern, bool verbose)
initPQExpBuffer(&buf);
- printfPQExpBuffer(&buf,
+ printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching event triggers"));
+ appendPQExpBuffer(&buf,
"SELECT evtname as \"%s\", "
"evtevent as \"%s\", "
"pg_catalog.pg_get_userbyid(e.evtowner) as \"%s\",\n"
@@ -5053,7 +5100,9 @@ listExtendedStats(const char *pattern, bool verbose)
}
initPQExpBuffer(&buf);
- printfPQExpBuffer(&buf,
+
+ printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching extended statistics"));
+ appendPQExpBuffer(&buf,
"SELECT \n"
"es.stxnamespace::pg_catalog.regnamespace::pg_catalog.text AS \"%s\", \n"
"es.stxname AS \"%s\", \n",
@@ -5146,7 +5195,8 @@ listCasts(const char *pattern, bool verbose)
initPQExpBuffer(&buf);
- printfPQExpBuffer(&buf,
+ printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching casts"));
+ appendPQExpBuffer(&buf,
"SELECT pg_catalog.format_type(castsource, NULL) AS \"%s\",\n"
" pg_catalog.format_type(casttarget, NULL) AS \"%s\",\n",
gettext_noop("Source type"),
@@ -5270,7 +5320,8 @@ listCollations(const char *pattern, bool verbose, bool showSystem)
initPQExpBuffer(&buf);
- printfPQExpBuffer(&buf,
+ printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching collations"));
+ appendPQExpBuffer(&buf,
"SELECT\n"
" n.nspname AS \"%s\",\n"
" c.collname AS \"%s\",\n",
@@ -5393,7 +5444,9 @@ listSchemas(const char *pattern, bool verbose, bool showSystem)
char **footers = NULL;
initPQExpBuffer(&buf);
- printfPQExpBuffer(&buf,
+
+ printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching schemas"));
+ appendPQExpBuffer(&buf,
"SELECT n.nspname AS \"%s\",\n"
" pg_catalog.pg_get_userbyid(n.nspowner) AS \"%s\"",
gettext_noop("Name"),
@@ -5436,7 +5489,8 @@ listSchemas(const char *pattern, bool verbose, bool showSystem)
PGresult *result;
int i;
- printfPQExpBuffer(&buf,
+ printfPQExpBuffer(&buf, "/* %s */\n", _("Get publications that use this schema"));
+ appendPQExpBuffer(&buf,
"SELECT pubname \n"
"FROM pg_catalog.pg_publication p\n"
" JOIN pg_catalog.pg_publication_namespace pn ON p.oid = pn.pnpubid\n"
@@ -5516,7 +5570,8 @@ listTSParsers(const char *pattern, bool verbose)
initPQExpBuffer(&buf);
- printfPQExpBuffer(&buf,
+ printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching text search parsers"));
+ appendPQExpBuffer(&buf,
"SELECT\n"
" n.nspname as \"%s\",\n"
" p.prsname as \"%s\",\n"
@@ -5565,7 +5620,8 @@ listTSParsersVerbose(const char *pattern)
initPQExpBuffer(&buf);
- printfPQExpBuffer(&buf,
+ printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching text search parsers"));
+ appendPQExpBuffer(&buf,
"SELECT p.oid,\n"
" n.nspname,\n"
" p.prsname\n"
@@ -5642,7 +5698,8 @@ describeOneTSParser(const char *oid, const char *nspname, const char *prsname)
initPQExpBuffer(&buf);
- printfPQExpBuffer(&buf,
+ printfPQExpBuffer(&buf, "/* %s */\n", _("Get text search parser details"));
+ appendPQExpBuffer(&buf,
"SELECT '%s' AS \"%s\",\n"
" p.prsstart::pg_catalog.regproc AS \"%s\",\n"
" pg_catalog.obj_description(p.prsstart, 'pg_proc') as \"%s\"\n"
@@ -5710,7 +5767,8 @@ describeOneTSParser(const char *oid, const char *nspname, const char *prsname)
initPQExpBuffer(&buf);
- printfPQExpBuffer(&buf,
+ printfPQExpBuffer(&buf, "/* %s */\n", _("Get text search parser tokens"));
+ appendPQExpBuffer(&buf,
"SELECT t.alias as \"%s\",\n"
" t.description as \"%s\"\n"
"FROM pg_catalog.ts_token_type( '%s'::pg_catalog.oid ) as t\n"
@@ -5760,7 +5818,8 @@ listTSDictionaries(const char *pattern, bool verbose)
initPQExpBuffer(&buf);
- printfPQExpBuffer(&buf,
+ printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching text search dictionaries"));
+ appendPQExpBuffer(&buf,
"SELECT\n"
" n.nspname as \"%s\",\n"
" d.dictname as \"%s\",\n",
@@ -5825,8 +5884,9 @@ listTSTemplates(const char *pattern, bool verbose)
initPQExpBuffer(&buf);
+ printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching text search templates"));
if (verbose)
- printfPQExpBuffer(&buf,
+ appendPQExpBuffer(&buf,
"SELECT\n"
" n.nspname AS \"%s\",\n"
" t.tmplname AS \"%s\",\n"
@@ -5839,7 +5899,7 @@ listTSTemplates(const char *pattern, bool verbose)
gettext_noop("Lexize"),
gettext_noop("Description"));
else
- printfPQExpBuffer(&buf,
+ appendPQExpBuffer(&buf,
"SELECT\n"
" n.nspname AS \"%s\",\n"
" t.tmplname AS \"%s\",\n"
@@ -5893,7 +5953,8 @@ listTSConfigs(const char *pattern, bool verbose)
initPQExpBuffer(&buf);
- printfPQExpBuffer(&buf,
+ printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching text search configurations"));
+ appendPQExpBuffer(&buf,
"SELECT\n"
" n.nspname as \"%s\",\n"
" c.cfgname as \"%s\",\n"
@@ -5939,7 +6000,8 @@ listTSConfigsVerbose(const char *pattern)
initPQExpBuffer(&buf);
- printfPQExpBuffer(&buf,
+ printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching text search configurations"));
+ appendPQExpBuffer(&buf,
"SELECT c.oid, c.cfgname,\n"
" n.nspname,\n"
" p.prsname,\n"
@@ -6025,7 +6087,8 @@ describeOneTSConfig(const char *oid, const char *nspname, const char *cfgname,
initPQExpBuffer(&buf);
- printfPQExpBuffer(&buf,
+ printfPQExpBuffer(&buf, "/* %s */\n", _("Get text search configuration details"));
+ appendPQExpBuffer(&buf,
"SELECT\n"
" ( SELECT t.alias FROM\n"
" pg_catalog.ts_token_type(c.cfgparser) AS t\n"
@@ -6093,7 +6156,9 @@ listForeignDataWrappers(const char *pattern, bool verbose)
printQueryOpt myopt = pset.popt;
initPQExpBuffer(&buf);
- printfPQExpBuffer(&buf,
+
+ printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching foreign-data wrappers"));
+ appendPQExpBuffer(&buf,
"SELECT fdw.fdwname AS \"%s\",\n"
" pg_catalog.pg_get_userbyid(fdw.fdwowner) AS \"%s\",\n"
" fdw.fdwhandler::pg_catalog.regproc AS \"%s\",\n"
@@ -6164,7 +6229,9 @@ listForeignServers(const char *pattern, bool verbose)
printQueryOpt myopt = pset.popt;
initPQExpBuffer(&buf);
- printfPQExpBuffer(&buf,
+
+ printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching foreign servers"));
+ appendPQExpBuffer(&buf,
"SELECT s.srvname AS \"%s\",\n"
" pg_catalog.pg_get_userbyid(s.srvowner) AS \"%s\",\n"
" f.fdwname AS \"%s\"",
@@ -6240,7 +6307,9 @@ listUserMappings(const char *pattern, bool verbose)
printQueryOpt myopt = pset.popt;
initPQExpBuffer(&buf);
- printfPQExpBuffer(&buf,
+
+ printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching user mappings"));
+ appendPQExpBuffer(&buf,
"SELECT um.srvname AS \"%s\",\n"
" um.usename AS \"%s\"",
gettext_noop("Server"),
@@ -6295,7 +6364,9 @@ listForeignTables(const char *pattern, bool verbose)
printQueryOpt myopt = pset.popt;
initPQExpBuffer(&buf);
- printfPQExpBuffer(&buf,
+
+ printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching foreign tables"));
+ appendPQExpBuffer(&buf,
"SELECT n.nspname AS \"%s\",\n"
" c.relname AS \"%s\",\n"
" s.srvname AS \"%s\"",
@@ -6367,7 +6438,9 @@ listExtensions(const char *pattern)
printQueryOpt myopt = pset.popt;
initPQExpBuffer(&buf);
- printfPQExpBuffer(&buf,
+
+ printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching extensions"));
+ appendPQExpBuffer(&buf,
"SELECT e.extname AS \"%s\", "
"e.extversion AS \"%s\", ae.default_version AS \"%s\","
"n.nspname AS \"%s\", d.description AS \"%s\"\n"
@@ -6421,7 +6494,9 @@ listExtensionContents(const char *pattern)
int i;
initPQExpBuffer(&buf);
- printfPQExpBuffer(&buf,
+
+ printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching installed extensions"));
+ appendPQExpBuffer(&buf,
"SELECT e.extname, e.oid\n"
"FROM pg_catalog.pg_extension e\n");
@@ -6489,7 +6564,9 @@ listOneExtensionContents(const char *extname, const char *oid)
printQueryOpt myopt = pset.popt;
initPQExpBuffer(&buf);
- printfPQExpBuffer(&buf,
+
+ printfPQExpBuffer(&buf, "/* %s */\n", _("Get installed extension details"));
+ appendPQExpBuffer(&buf,
"SELECT pg_catalog.pg_describe_object(classid, objid, 0) AS \"%s\"\n"
"FROM pg_catalog.pg_depend\n"
"WHERE refclassid = 'pg_catalog.pg_extension'::pg_catalog.regclass AND refobjid = '%s' AND
deptype= 'e'\n"
@@ -6597,7 +6674,8 @@ listPublications(const char *pattern)
initPQExpBuffer(&buf);
- printfPQExpBuffer(&buf,
+ printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching publications"));
+ appendPQExpBuffer(&buf,
"SELECT pubname AS \"%s\",\n"
" pg_catalog.pg_get_userbyid(pubowner) AS \"%s\",\n"
" puballtables AS \"%s\"",
@@ -6748,7 +6826,8 @@ describePublications(const char *pattern)
initPQExpBuffer(&buf);
- printfPQExpBuffer(&buf,
+ printfPQExpBuffer(&buf, "/* %s */\n", _("Get details about matching publications"));
+ appendPQExpBuffer(&buf,
"SELECT oid, pubname,\n"
" pg_catalog.pg_get_userbyid(pubowner) AS owner,\n"
" puballtables");
@@ -6884,8 +6963,8 @@ describePublications(const char *pattern)
if (!puballtables)
{
/* Get the tables for the specified publication */
- printfPQExpBuffer(&buf,
- "SELECT n.nspname, c.relname");
+ printfPQExpBuffer(&buf, "/* %s */\n", _("Get tables used by this publication"));
+ appendPQExpBuffer(&buf, "SELECT n.nspname, c.relname");
if (pset.sversion >= 150000)
{
appendPQExpBufferStr(&buf,
@@ -6921,7 +7000,8 @@ describePublications(const char *pattern)
if (pset.sversion >= 150000)
{
/* Get the schemas for the specified publication */
- printfPQExpBuffer(&buf,
+ printfPQExpBuffer(&buf, "/* %s */\n", _("Get schemas used by this publication"));
+ appendPQExpBuffer(&buf,
"SELECT n.nspname\n"
"FROM pg_catalog.pg_namespace n\n"
" JOIN pg_catalog.pg_publication_namespace pn ON n.oid = pn.pnnspid\n"
@@ -6937,7 +7017,8 @@ describePublications(const char *pattern)
if (pset.sversion >= 190000)
{
/* Get tables in the EXCEPT clause for this publication */
- printfPQExpBuffer(&buf,
+ printfPQExpBuffer(&buf, "/* %s */\n", _("Get tables excluded by this publication"));
+ appendPQExpBuffer(&buf,
"SELECT n.nspname || '.' || c.relname\n"
"FROM pg_catalog.pg_class c\n"
" JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace\n"
@@ -6997,7 +7078,8 @@ describeSubscriptions(const char *pattern, bool verbose)
initPQExpBuffer(&buf);
- printfPQExpBuffer(&buf,
+ printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching subscriptions"));
+ appendPQExpBuffer(&buf,
"SELECT subname AS \"%s\"\n"
", pg_catalog.pg_get_userbyid(subowner) AS \"%s\"\n"
", subenabled AS \"%s\"\n"
@@ -7166,7 +7248,8 @@ listOperatorClasses(const char *access_method_pattern,
initPQExpBuffer(&buf);
- printfPQExpBuffer(&buf,
+ printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching operator classes"));
+ appendPQExpBuffer(&buf,
"SELECT\n"
" am.amname AS \"%s\",\n"
" pg_catalog.format_type(c.opcintype, NULL) AS \"%s\",\n"
@@ -7267,7 +7350,8 @@ listOperatorFamilies(const char *access_method_pattern,
initPQExpBuffer(&buf);
- printfPQExpBuffer(&buf,
+ printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching operator families"));
+ appendPQExpBuffer(&buf,
"SELECT\n"
" am.amname AS \"%s\",\n"
" CASE\n"
@@ -7357,7 +7441,8 @@ listOpFamilyOperators(const char *access_method_pattern,
initPQExpBuffer(&buf);
- printfPQExpBuffer(&buf,
+ printfPQExpBuffer(&buf, "/* %s */\n", _("Get operators of matching operator families"));
+ appendPQExpBuffer(&buf,
"SELECT\n"
" am.amname AS \"%s\",\n"
" CASE\n"
@@ -7463,7 +7548,8 @@ listOpFamilyFunctions(const char *access_method_pattern,
initPQExpBuffer(&buf);
- printfPQExpBuffer(&buf,
+ printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching support functions of operator families"));
+ appendPQExpBuffer(&buf,
"SELECT\n"
" am.amname AS \"%s\",\n"
" CASE\n"
@@ -7549,7 +7635,8 @@ listLargeObjects(bool verbose)
initPQExpBuffer(&buf);
- printfPQExpBuffer(&buf,
+ printfPQExpBuffer(&buf, "/* %s */\n", _("Get large objects"));
+ appendPQExpBuffer(&buf,
"SELECT oid as \"%s\",\n"
" pg_catalog.pg_get_userbyid(lomowner) as \"%s\",\n ",
gettext_noop("ID"),
--
2.43.7
From bdf43f23022268166c74714cc9889c5753748fc1 Mon Sep 17 00:00:00 2001
From: Tom Lane <tgl@sss.pgh.pa.us>
Date: Mon, 23 Mar 2026 13:22:45 -0400
Subject: [PATCH v8 2/2] Improve comment headers for generated SQL inside psql.
Label generated queries as "INTERNAL QUERY", reserving the plain
"QUERY" label for user-entered commands.
Fix a few generated queries in command.c to follow the labeling
convention we're establishing. (I looked through the other uses
of PSQLexec(), but the rest all issue quite trivial commands
that don't seem to need a gloss, such as BEGIN or COMMIT.)
Copy-edit some of Greg's proposed headers to improve uniformity.
Also add headers to a couple of queries that were missed.
If I've not messed up, every PSQLexec() in describe.c now has
a header comment.
---
src/bin/psql/command.c | 14 ++++---
src/bin/psql/common.c | 4 +-
src/bin/psql/describe.c | 84 +++++++++++++++++++++++++++--------------
3 files changed, 66 insertions(+), 36 deletions(-)
diff --git a/src/bin/psql/command.c b/src/bin/psql/command.c
index 37e2241edf6..493400f9090 100644
--- a/src/bin/psql/command.c
+++ b/src/bin/psql/command.c
@@ -6158,14 +6158,14 @@ echo_hidden_command(const char *query)
{
if (pset.echo_hidden != PSQL_ECHO_HIDDEN_OFF)
{
- printf(_("/******** QUERY *********/\n"
+ printf(_("/**** INTERNAL QUERY ****/\n"
"%s\n"
"/************************/\n\n"), query);
fflush(stdout);
if (pset.logfile)
{
fprintf(pset.logfile,
- _("/******** QUERY *********/\n"
+ _("/**** INTERNAL QUERY ****/\n"
"%s\n"
"/************************/\n\n"), query);
fflush(pset.logfile);
@@ -6202,6 +6202,7 @@ lookup_object_oid(EditableObjectType obj_type, const char *desc,
* query to retrieve the function's OID using a cast to regproc or
* regprocedure (as appropriate).
*/
+ printfPQExpBuffer(query, "/* %s */\n", _("Get function's OID"));
appendPQExpBufferStr(query, "SELECT ");
appendStringLiteralConn(query, desc, pset.db);
appendPQExpBuffer(query, "::pg_catalog.%s::pg_catalog.oid",
@@ -6215,6 +6216,7 @@ lookup_object_oid(EditableObjectType obj_type, const char *desc,
* this code doesn't check if the relation is actually a view.
* We'll detect that in get_create_object_cmd().
*/
+ printfPQExpBuffer(query, "/* %s */\n", _("Get view's OID"));
appendPQExpBufferStr(query, "SELECT ");
appendStringLiteralConn(query, desc, pset.db);
appendPQExpBufferStr(query, "::pg_catalog.regclass::pg_catalog.oid");
@@ -6256,7 +6258,8 @@ get_create_object_cmd(EditableObjectType obj_type, Oid oid,
switch (obj_type)
{
case EditableFunction:
- printfPQExpBuffer(query,
+ printfPQExpBuffer(query, "/* %s */\n", _("Get function's definition"));
+ appendPQExpBuffer(query,
"SELECT pg_catalog.pg_get_functiondef(%u)",
oid);
break;
@@ -6275,9 +6278,10 @@ get_create_object_cmd(EditableObjectType obj_type, Oid oid,
* separately. Materialized views (introduced in 9.3) may have
* arbitrary storage parameter reloptions.
*/
+ printfPQExpBuffer(query, "/* %s */\n", _("Get view's definition and details"));
if (pset.sversion >= 90400)
{
- printfPQExpBuffer(query,
+ appendPQExpBuffer(query,
"SELECT nspname, relname, relkind, "
"pg_catalog.pg_get_viewdef(c.oid, true), "
"pg_catalog.array_remove(pg_catalog.array_remove(c.reloptions,'check_option=local'),'check_option=cascaded')AS
reloptions,"
@@ -6290,7 +6294,7 @@ get_create_object_cmd(EditableObjectType obj_type, Oid oid,
}
else
{
- printfPQExpBuffer(query,
+ appendPQExpBuffer(query,
"SELECT nspname, relname, relkind, "
"pg_catalog.pg_get_viewdef(c.oid, true), "
"c.reloptions AS reloptions, "
diff --git a/src/bin/psql/common.c b/src/bin/psql/common.c
index 2eadd391a9c..476e7fe6737 100644
--- a/src/bin/psql/common.c
+++ b/src/bin/psql/common.c
@@ -664,14 +664,14 @@ PSQLexec(const char *query)
if (pset.echo_hidden != PSQL_ECHO_HIDDEN_OFF)
{
- printf(_("/******** QUERY *********/\n"
+ printf(_("/**** INTERNAL QUERY ****/\n"
"%s\n"
"/************************/\n\n"), query);
fflush(stdout);
if (pset.logfile)
{
fprintf(pset.logfile,
- _("/******** QUERY *********/\n"
+ _("/**** INTERNAL QUERY ****/\n"
"%s\n"
"/************************/\n\n"), query);
fflush(pset.logfile);
diff --git a/src/bin/psql/describe.c b/src/bin/psql/describe.c
index f09cd49850c..b9f43daf0bc 100644
--- a/src/bin/psql/describe.c
+++ b/src/bin/psql/describe.c
@@ -1067,7 +1067,8 @@ permissionsList(const char *pattern, bool showSystem)
/*
* we ignore indexes and toast tables since they have no meaningful rights
*/
- printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching access privileges"));
+ printfPQExpBuffer(&buf, "/* %s */\n",
+ _("Get access privileges of matching tables"));
appendPQExpBuffer(&buf,
"SELECT n.nspname as \"%s\",\n"
" c.relname as \"%s\",\n"
@@ -1507,7 +1508,7 @@ describeTableDetails(const char *pattern, bool verbose, bool showSystem)
initPQExpBuffer(&buf);
- printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching relations to describe"));
+ printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching tables to describe"));
appendPQExpBuffer(&buf,
"SELECT c.oid,\n"
" n.nspname,\n"
@@ -1644,7 +1645,8 @@ describeOneTableDetails(const char *schemaname,
initPQExpBuffer(&tmpbuf);
/* Get general table info */
- printfPQExpBuffer(&buf, "/* %s */\n", _("Get general relation information"));
+ printfPQExpBuffer(&buf, "/* %s */\n",
+ _("Get general information about one table"));
if (pset.sversion >= 120000)
{
appendPQExpBuffer(&buf,
@@ -1971,7 +1973,8 @@ describeOneTableDetails(const char *schemaname,
{
PGresult *result;
- printfPQExpBuffer(&buf,
+ printfPQExpBuffer(&buf, "/* %s */\n", _("Get property graph definition"));
+ appendPQExpBuffer(&buf,
"SELECT pg_catalog.pg_get_propgraphdef('%s'::pg_catalog.oid);",
oid);
result = PSQLexec(buf.data);
@@ -2019,7 +2022,8 @@ describeOneTableDetails(const char *schemaname,
* duplicative test logic below.
*/
cols = 0;
- printfPQExpBuffer(&buf, "/* %s */\n", _("Get columns for this relation"));
+ printfPQExpBuffer(&buf, "/* %s */\n",
+ _("Get per-column information for one table"));
appendPQExpBuffer(&buf, "SELECT a.attname");
attname_col = cols++;
appendPQExpBufferStr(&buf, ",\n pg_catalog.format_type(a.atttypid, a.atttypmod)");
@@ -2322,7 +2326,8 @@ describeOneTableDetails(const char *schemaname,
/* Footer information for a partition child table */
PGresult *result;
- printfPQExpBuffer(&buf, "/* %s */\n", _("Get partition information for this table"));
+ printfPQExpBuffer(&buf, "/* %s */\n",
+ _("Get partitioning information for this partition"));
appendPQExpBuffer(&buf,
"SELECT inhparent::pg_catalog.regclass,\n"
" pg_catalog.pg_get_expr(c.relpartbound, c.oid),\n ");
@@ -2378,7 +2383,9 @@ describeOneTableDetails(const char *schemaname,
/* Footer information for a partitioned table (partitioning parent) */
PGresult *result;
- printfPQExpBuffer(&buf,
+ printfPQExpBuffer(&buf, "/* %s */\n",
+ _("Get partitioning information for this table"));
+ appendPQExpBuffer(&buf,
"SELECT pg_catalog.pg_get_partkeydef('%s'::pg_catalog.oid);",
oid);
result = PSQLexec(buf.data);
@@ -2400,7 +2407,8 @@ describeOneTableDetails(const char *schemaname,
/* For a TOAST table, print name of owning table */
PGresult *result;
- printfPQExpBuffer(&buf, "/* %s */\n", _("Get the table which owns this TOAST table"));
+ printfPQExpBuffer(&buf, "/* %s */\n",
+ _("Get the table that owns this TOAST table"));
appendPQExpBuffer(&buf,
"SELECT n.nspname, c.relname\n"
"FROM pg_catalog.pg_class c"
@@ -2656,8 +2664,8 @@ describeOneTableDetails(const char *schemaname,
/* print table (and column) check constraints */
if (tableinfo.checks)
{
-
- printfPQExpBuffer(&buf, "/* %s */\n", _("Get check constraints"));
+ printfPQExpBuffer(&buf, "/* %s */\n",
+ _("Get check constraints for this table"));
appendPQExpBuffer(&buf,
"SELECT r.conname, "
"pg_catalog.pg_get_constraintdef(r.oid, true)\n"
@@ -2689,7 +2697,8 @@ describeOneTableDetails(const char *schemaname,
}
/* Print foreign-key constraints */
- printfPQExpBuffer(&buf, "/* %s */\n", _("Get foreign key constraints"));
+ printfPQExpBuffer(&buf, "/* %s */\n",
+ _("Get foreign key constraints for this table"));
if (pset.sversion >= 120000 &&
(tableinfo.ispartition || tableinfo.relkind == RELKIND_PARTITIONED_TABLE))
{
@@ -2760,7 +2769,8 @@ describeOneTableDetails(const char *schemaname,
PQclear(result);
/* print incoming foreign-key references */
- printfPQExpBuffer(&buf, "/* %s */\n", _("Get foreign keys referencing this table"));
+ printfPQExpBuffer(&buf, "/* %s */\n",
+ _("Get foreign keys referencing this table"));
if (pset.sversion >= 120000)
{
appendPQExpBuffer(&buf,
@@ -2812,7 +2822,8 @@ describeOneTableDetails(const char *schemaname,
/* print any row-level policies */
if (pset.sversion >= 90500)
{
- printfPQExpBuffer(&buf, "/* %s */\n", _("Get row-level policies for this table"));
+ printfPQExpBuffer(&buf, "/* %s */\n",
+ _("Get row-level policies for this table"));
appendPQExpBuffer(&buf, "SELECT pol.polname,");
if (pset.sversion >= 100000)
appendPQExpBufferStr(&buf,
@@ -2893,9 +2904,10 @@ describeOneTableDetails(const char *schemaname,
}
/* print any extended statistics */
- printfPQExpBuffer(&buf, "/* %s */\n", _("Get extended statistics for this table"));
if (pset.sversion >= 140000)
{
+ printfPQExpBuffer(&buf, "/* %s */\n",
+ _("Get extended statistics for this table"));
appendPQExpBuffer(&buf,
"SELECT oid, "
"stxrelid::pg_catalog.regclass, "
@@ -2994,6 +3006,8 @@ describeOneTableDetails(const char *schemaname,
}
else if (pset.sversion >= 100000)
{
+ printfPQExpBuffer(&buf, "/* %s */\n",
+ _("Get extended statistics for this table"));
appendPQExpBuffer(&buf,
"SELECT oid, "
"stxrelid::pg_catalog.regclass, "
@@ -3157,7 +3171,8 @@ describeOneTableDetails(const char *schemaname,
/* print any publications */
if (pset.sversion >= 100000)
{
- printfPQExpBuffer(&buf, "/* %s */\n", _("Get publications that use this table"));
+ printfPQExpBuffer(&buf, "/* %s */\n",
+ _("Get publications that publish this table"));
if (pset.sversion >= 150000)
{
appendPQExpBuffer(&buf,
@@ -3303,7 +3318,8 @@ describeOneTableDetails(const char *schemaname,
*/
if (verbose)
{
- printfPQExpBuffer(&buf, "/* %s */\n", _("Get not null constraints for this table"));
+ printfPQExpBuffer(&buf, "/* %s */\n",
+ _("Get not-null constraints for this table"));
appendPQExpBuffer(&buf,
"SELECT c.conname, a.attname, c.connoinherit,\n"
" c.conislocal, c.coninhcount <> 0,\n"
@@ -3353,7 +3369,8 @@ describeOneTableDetails(const char *schemaname,
{
PGresult *result;
- printfPQExpBuffer(&buf,
+ printfPQExpBuffer(&buf, "/* %s */\n", _("Get view's definition"));
+ appendPQExpBuffer(&buf,
"SELECT pg_catalog.pg_get_viewdef('%s'::pg_catalog.oid, true);",
oid);
result = PSQLexec(buf.data);
@@ -3599,7 +3616,8 @@ describeOneTableDetails(const char *schemaname,
char *ftoptions;
/* Footer information about foreign table */
- printfPQExpBuffer(&buf, "/* %s */\n", _("Get foreign server"));
+ printfPQExpBuffer(&buf, "/* %s */\n",
+ _("Get foreign server for this table"));
appendPQExpBuffer(&buf,
"SELECT s.srvname,\n"
" pg_catalog.array_to_string(ARRAY(\n"
@@ -3635,7 +3653,8 @@ describeOneTableDetails(const char *schemaname,
}
/* print tables inherited from (exclude partitioned parents) */
- printfPQExpBuffer(&buf, "/* %s */\n", _("Get parent tables"));
+ printfPQExpBuffer(&buf, "/* %s */\n",
+ _("Get inheritance parent tables"));
appendPQExpBuffer(&buf,
"SELECT c.oid::pg_catalog.regclass\n"
"FROM pg_catalog.pg_class c, pg_catalog.pg_inherits i\n"
@@ -3869,7 +3888,9 @@ add_tablespace_footer(printTableContent *const cont, char relkind,
PQExpBufferData buf;
initPQExpBuffer(&buf);
- printfPQExpBuffer(&buf,
+ printfPQExpBuffer(&buf, "/* %s */\n",
+ _("Get tablespace information for this table"));
+ appendPQExpBuffer(&buf,
"SELECT spcname FROM pg_catalog.pg_tablespace\n"
"WHERE oid = '%u';", tablespace);
result = PSQLexec(buf.data);
@@ -4238,7 +4259,7 @@ listTables(const char *tabtypes, const char *pattern, bool verbose, bool showSys
initPQExpBuffer(&buf);
- printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching relations"));
+ printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching tables"));
appendPQExpBuffer(&buf,
"SELECT n.nspname as \"%s\",\n"
" c.relname as \"%s\",\n"
@@ -4698,7 +4719,7 @@ listLanguages(const char *pattern, bool verbose, bool showSystem)
initPQExpBuffer(&buf);
- printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching languages"));
+ printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching procedural languages"));
appendPQExpBuffer(&buf,
"SELECT l.lanname AS \"%s\",\n"
" pg_catalog.pg_get_userbyid(l.lanowner) as \"%s\",\n"
@@ -5489,7 +5510,8 @@ listSchemas(const char *pattern, bool verbose, bool showSystem)
PGresult *result;
int i;
- printfPQExpBuffer(&buf, "/* %s */\n", _("Get publications that use this schema"));
+ printfPQExpBuffer(&buf, "/* %s */\n",
+ _("Get publications that publish this schema"));
appendPQExpBuffer(&buf,
"SELECT pubname \n"
"FROM pg_catalog.pg_publication p\n"
@@ -6439,7 +6461,7 @@ listExtensions(const char *pattern)
initPQExpBuffer(&buf);
- printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching extensions"));
+ printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching installed extensions"));
appendPQExpBuffer(&buf,
"SELECT e.extname AS \"%s\", "
"e.extversion AS \"%s\", ae.default_version AS \"%s\","
@@ -6565,7 +6587,7 @@ listOneExtensionContents(const char *extname, const char *oid)
initPQExpBuffer(&buf);
- printfPQExpBuffer(&buf, "/* %s */\n", _("Get installed extension details"));
+ printfPQExpBuffer(&buf, "/* %s */\n", _("Get installed extension's contents"));
appendPQExpBuffer(&buf,
"SELECT pg_catalog.pg_describe_object(classid, objid, 0) AS \"%s\"\n"
"FROM pg_catalog.pg_depend\n"
@@ -6963,7 +6985,8 @@ describePublications(const char *pattern)
if (!puballtables)
{
/* Get the tables for the specified publication */
- printfPQExpBuffer(&buf, "/* %s */\n", _("Get tables used by this publication"));
+ printfPQExpBuffer(&buf, "/* %s */\n",
+ _("Get tables published by this publication"));
appendPQExpBuffer(&buf, "SELECT n.nspname, c.relname");
if (pset.sversion >= 150000)
{
@@ -7000,7 +7023,8 @@ describePublications(const char *pattern)
if (pset.sversion >= 150000)
{
/* Get the schemas for the specified publication */
- printfPQExpBuffer(&buf, "/* %s */\n", _("Get schemas used by this publication"));
+ printfPQExpBuffer(&buf, "/* %s */\n",
+ _("Get schemas published by this publication"));
appendPQExpBuffer(&buf,
"SELECT n.nspname\n"
"FROM pg_catalog.pg_namespace n\n"
@@ -7017,7 +7041,8 @@ describePublications(const char *pattern)
if (pset.sversion >= 190000)
{
/* Get tables in the EXCEPT clause for this publication */
- printfPQExpBuffer(&buf, "/* %s */\n", _("Get tables excluded by this publication"));
+ printfPQExpBuffer(&buf, "/* %s */\n",
+ _("Get tables excluded by this publication"));
appendPQExpBuffer(&buf,
"SELECT n.nspname || '.' || c.relname\n"
"FROM pg_catalog.pg_class c\n"
@@ -7548,7 +7573,8 @@ listOpFamilyFunctions(const char *access_method_pattern,
initPQExpBuffer(&buf);
- printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching support functions of operator families"));
+ printfPQExpBuffer(&buf, "/* %s */\n",
+ _("Get support functions of matching operator families"));
appendPQExpBuffer(&buf,
"SELECT\n"
" am.amname AS \"%s\",\n"
--
2.43.7
pgsql-hackers by date: