#include <ctype.h>
+#include "catalog/pg_attribute.h"
#include "catalog/pg_class.h"
#include "catalog/pg_default_acl.h"
#include "fe_utils/string_utils.h"
" END ||\n"
" CASE\n"
" WHEN COALESCE(p.proargnames[s.i], '') = '' THEN ''\n"
- " ELSE p.proargnames[s.i] || ' ' \n"
+ " ELSE p.proargnames[s.i] || ' '\n"
" END ||\n"
" pg_catalog.format_type(p.proallargtypes[s.i], NULL)\n"
" FROM\n"
appendPQExpBufferStr(&buf,
" pg_catalog.array_to_string(\n"
" ARRAY(\n"
- " SELECT e.enumlabel\n"
+ " SELECT e.enumlabel\n"
" FROM pg_catalog.pg_enum e\n"
" WHERE e.enumtypid = t.oid\n");
" WHEN " CppAsString2(RELKIND_VIEW) " THEN '%s'"
" WHEN " CppAsString2(RELKIND_MATVIEW) " THEN '%s'"
" WHEN " CppAsString2(RELKIND_SEQUENCE) " THEN '%s'"
- " WHEN " CppAsString2(RELKIND_FOREIGN_TABLE) " THEN '%s'"
- " WHEN " CppAsString2(RELKIND_PARTITIONED_TABLE) " THEN '%s'"
+ " WHEN " CppAsString2(RELKIND_FOREIGN_TABLE) " THEN '%s'"
+ " WHEN " CppAsString2(RELKIND_PARTITIONED_TABLE) " THEN '%s'"
" END as \"%s\",\n"
" ",
gettext_noop("Schema"),
" SELECT polname\n"
" || CASE WHEN polcmd != '*' THEN\n"
" E' (' || polcmd || E'):'\n"
- " ELSE E':' \n"
+ " ELSE E':'\n"
" END\n"
" || CASE WHEN polqual IS NOT NULL THEN\n"
" E'\\n (u): ' || pg_catalog.pg_get_expr(polqual, polrelid)\n"
" ELSE '' END\n"
" || CASE WHEN polcmd != '*' THEN\n"
" E' (' || polcmd || E'):'\n"
- " ELSE E':' \n"
+ " ELSE E':'\n"
" END\n"
" || CASE WHEN polqual IS NOT NULL THEN\n"
" E'\\n (u): ' || pg_catalog.pg_get_expr(polqual, polrelid)\n"
" WHERE c.oid = a.attcollation AND t.oid = a.atttypid AND a.attcollation <> t.typcollation) AS attcollation");
else
appendPQExpBufferStr(&buf, "\n NULL AS attcollation");
+ if (pset.sversion >= 100000)
+ appendPQExpBufferStr(&buf, ", a.attidentity");
+ else
+ appendPQExpBufferStr(&buf, ", ''::\"char\" AS attidentity");
if (tableinfo.relkind == RELKIND_INDEX)
appendPQExpBufferStr(&buf, ",\n pg_catalog.pg_get_indexdef(a.attrelid, a.attnum, TRUE) AS indexdef");
else
headers[cols++] = gettext_noop("Definition");
if (tableinfo.relkind == RELKIND_FOREIGN_TABLE && pset.sversion >= 90200)
- headers[cols++] = gettext_noop("FDW Options");
+ headers[cols++] = gettext_noop("FDW options");
if (verbose)
{
/* Collation, Nullable, Default */
if (show_column_details)
{
+ char *identity;
+ char *default_str = "";
+
printTableAddCell(&cont, PQgetvalue(res, i, 5), false, false);
printTableAddCell(&cont, strcmp(PQgetvalue(res, i, 3), "t") == 0 ? "not null" : "", false, false);
- /* (note: above we cut off the 'default' string at 128) */
- printTableAddCell(&cont, PQgetvalue(res, i, 2), false, false);
+ identity = PQgetvalue(res, i, 6);
+
+ if (!identity[0])
+ /* (note: above we cut off the 'default' string at 128) */
+ default_str = PQgetvalue(res, i, 2);
+ else if (identity[0] == ATTRIBUTE_IDENTITY_ALWAYS)
+ default_str = "generated always as identity";
+ else if (identity[0] == ATTRIBUTE_IDENTITY_BY_DEFAULT)
+ default_str = "generated by default as identity";
+
+ printTableAddCell(&cont, default_str, false, false);
}
/* Value: for sequences only */
/* Expression for index column */
if (tableinfo.relkind == RELKIND_INDEX)
- printTableAddCell(&cont, PQgetvalue(res, i, 6), false, false);
+ printTableAddCell(&cont, PQgetvalue(res, i, 7), false, false);
/* FDW options for foreign table column, only for 9.2 or later */
if (tableinfo.relkind == RELKIND_FOREIGN_TABLE && pset.sversion >= 90200)
- printTableAddCell(&cont, PQgetvalue(res, i, 7), false, false);
+ printTableAddCell(&cont, PQgetvalue(res, i, 8), false, false);
/* Storage and Description */
if (verbose)
{
- int firstvcol = 8;
+ int firstvcol = 9;
char *storage = PQgetvalue(res, i, firstvcol);
/* these strings are literal in our syntax, so not translated. */
PGresult *result;
char *parent_name;
char *partdef;
+ char *partconstraintdef = NULL;
- printfPQExpBuffer(&buf,
- "SELECT inhparent::pg_catalog.regclass, pg_get_expr(c.relpartbound, inhrelid)"
- " FROM pg_catalog.pg_class c"
- " JOIN pg_catalog.pg_inherits"
- " ON c.oid = inhrelid"
- " WHERE c.oid = '%s' AND c.relispartition;", oid);
+ /* If verbose, also request the partition constraint definition */
+ if (verbose)
+ printfPQExpBuffer(&buf,
+ "SELECT inhparent::pg_catalog.regclass,"
+ " pg_get_expr(c.relpartbound, inhrelid),"
+ " pg_get_partition_constraintdef(inhrelid)"
+ " FROM pg_catalog.pg_class c"
+ " JOIN pg_catalog.pg_inherits"
+ " ON c.oid = inhrelid"
+ " WHERE c.oid = '%s' AND c.relispartition;", oid);
+ else
+ printfPQExpBuffer(&buf,
+ "SELECT inhparent::pg_catalog.regclass,"
+ " pg_get_expr(c.relpartbound, inhrelid)"
+ " FROM pg_catalog.pg_class c"
+ " JOIN pg_catalog.pg_inherits"
+ " ON c.oid = inhrelid"
+ " WHERE c.oid = '%s' AND c.relispartition;", oid);
result = PSQLexec(buf.data);
if (!result)
goto error_return;
{
parent_name = PQgetvalue(result, 0, 0);
partdef = PQgetvalue(result, 0, 1);
+
+ if (PQnfields(result) == 3)
+ partconstraintdef = PQgetvalue(result, 0, 2);
+
printfPQExpBuffer(&tmpbuf, _("Partition of: %s %s"), parent_name,
- partdef);
+ partdef);
printTableAddFooter(&cont, tmpbuf.data);
+
+ if (partconstraintdef)
+ {
+ printfPQExpBuffer(&tmpbuf, _("Partition constraint: %s"),
+ partconstraintdef);
+ printTableAddFooter(&cont, tmpbuf.data);
+ }
+
PQclear(result);
}
}
char *partkeydef;
printfPQExpBuffer(&buf,
- "SELECT pg_catalog.pg_get_partkeydef('%s'::pg_catalog.oid);",
+ "SELECT pg_catalog.pg_get_partkeydef('%s'::pg_catalog.oid);",
oid);
result = PSQLexec(buf.data);
if (!result || PQntuples(result) != 1)
/* Get the column that owns this sequence */
printfPQExpBuffer(&buf, "SELECT pg_catalog.quote_ident(nspname) || '.' ||"
"\n pg_catalog.quote_ident(relname) || '.' ||"
- "\n pg_catalog.quote_ident(attname)"
+ "\n pg_catalog.quote_ident(attname),"
+ "\n d.deptype"
"\nFROM pg_catalog.pg_class c"
"\nINNER JOIN pg_catalog.pg_depend d ON c.oid=d.refobjid"
"\nINNER JOIN pg_catalog.pg_namespace n ON n.oid=c.relnamespace"
"\nWHERE d.classid='pg_catalog.pg_class'::pg_catalog.regclass"
"\n AND d.refclassid='pg_catalog.pg_class'::pg_catalog.regclass"
"\n AND d.objid=%s"
- "\n AND d.deptype='a'",
+ "\n AND d.deptype IN ('a', 'i')",
oid);
result = PSQLexec(buf.data);
goto error_return;
else if (PQntuples(result) == 1)
{
- printfPQExpBuffer(&buf, _("Owned by: %s"),
- PQgetvalue(result, 0, 0));
- printTableAddFooter(&cont, buf.data);
+ switch (PQgetvalue(result, 0, 1)[0])
+ {
+ case 'a':
+ printfPQExpBuffer(&buf, _("Owned by: %s"),
+ PQgetvalue(result, 0, 0));
+ printTableAddFooter(&cont, buf.data);
+ break;
+ case 'i':
+ printfPQExpBuffer(&buf, _("Sequence for identity column: %s"),
+ PQgetvalue(result, 0, 0));
+ printTableAddFooter(&cont, buf.data);
+ break;
+ }
}
/*
printfPQExpBuffer(&buf,
"SELECT pol.polname, pol.polpermissive,\n"
"CASE WHEN pol.polroles = '{0}' THEN NULL ELSE array_to_string(array(select rolname from pg_roles where oid = any (pol.polroles) order by 1),',') END,\n"
- "pg_catalog.pg_get_expr(pol.polqual, pol.polrelid),\n"
- "pg_catalog.pg_get_expr(pol.polwithcheck, pol.polrelid),\n"
- "CASE pol.polcmd \n"
+ "pg_catalog.pg_get_expr(pol.polqual, pol.polrelid),\n"
+ "pg_catalog.pg_get_expr(pol.polwithcheck, pol.polrelid),\n"
+ "CASE pol.polcmd\n"
"WHEN 'r' THEN 'SELECT'\n"
"WHEN 'a' THEN 'INSERT'\n"
"WHEN 'w' THEN 'UPDATE'\n"
oid);
else
printfPQExpBuffer(&buf,
- "SELECT pol.polname, 't' as polpermissive,\n"
+ "SELECT pol.polname, 't' as polpermissive,\n"
"CASE WHEN pol.polroles = '{0}' THEN NULL ELSE array_to_string(array(select rolname from pg_roles where oid = any (pol.polroles) order by 1),',') END,\n"
- "pg_catalog.pg_get_expr(pol.polqual, pol.polrelid),\n"
- "pg_catalog.pg_get_expr(pol.polwithcheck, pol.polrelid),\n"
- "CASE pol.polcmd \n"
+ "pg_catalog.pg_get_expr(pol.polqual, pol.polrelid),\n"
+ "pg_catalog.pg_get_expr(pol.polwithcheck, pol.polrelid),\n"
+ "CASE pol.polcmd\n"
"WHEN 'r' THEN 'SELECT'\n"
"WHEN 'a' THEN 'INSERT'\n"
"WHEN 'w' THEN 'UPDATE'\n"
if (pset.sversion >= 100000)
{
printfPQExpBuffer(&buf,
- "SELECT oid, stanamespace::regnamespace AS nsp, staname, stakeys,\n"
- " (SELECT pg_catalog.string_agg(pg_catalog.quote_ident(attname::text),', ') \n"
- " FROM ((SELECT pg_catalog.unnest(stakeys) AS attnum) s\n"
- " JOIN pg_catalog.pg_attribute a ON (starelid = a.attrelid AND\n"
- "a.attnum = s.attnum AND not attisdropped))) AS columns,\n"
- " (staenabled::char[] @> '{d}'::char[]) AS ndist_enabled\n"
- "FROM pg_catalog.pg_statistic_ext stat WHERE starelid = '%s'\n"
- "ORDER BY 1;",
+ "SELECT oid, "
+ "stxrelid::pg_catalog.regclass, "
+ "stxnamespace::pg_catalog.regnamespace AS nsp, "
+ "stxname,\n"
+ " (SELECT pg_catalog.string_agg(pg_catalog.quote_ident(attname),', ')\n"
+ " FROM pg_catalog.unnest(stxkeys) s(attnum)\n"
+ " JOIN pg_catalog.pg_attribute a ON (stxrelid = a.attrelid AND\n"
+ " a.attnum = s.attnum AND NOT attisdropped)) AS columns,\n"
+ " (stxkind @> '{d}') AS ndist_enabled,\n"
+ " (stxkind @> '{f}') AS deps_enabled\n"
+ "FROM pg_catalog.pg_statistic_ext stat "
+ "WHERE stxrelid = '%s'\n"
+ "ORDER BY 1;",
oid);
result = PSQLexec(buf.data);
if (tuples > 0)
{
- printTableAddFooter(&cont, _("Statistics:"));
+ printTableAddFooter(&cont, _("Statistics objects:"));
for (i = 0; i < tuples; i++)
{
- int cnt = 0;
+ bool gotone = false;
printfPQExpBuffer(&buf, " ");
- /* statistics name (qualified with namespace) */
- appendPQExpBuffer(&buf, "\"%s.%s\" WITH (",
- PQgetvalue(result, i, 1),
- PQgetvalue(result, i, 2));
+ /* statistics object name (qualified with namespace) */
+ appendPQExpBuffer(&buf, "\"%s\".\"%s\" (",
+ PQgetvalue(result, i, 2),
+ PQgetvalue(result, i, 3));
/* options */
if (strcmp(PQgetvalue(result, i, 5), "t") == 0)
{
appendPQExpBufferStr(&buf, "ndistinct");
- cnt++;
+ gotone = true;
}
- appendPQExpBuffer(&buf, ") ON (%s)",
- PQgetvalue(result, i, 4));
+ if (strcmp(PQgetvalue(result, i, 6), "t") == 0)
+ {
+ appendPQExpBuffer(&buf, "%sdependencies", gotone ? ", " : "");
+ }
+
+ appendPQExpBuffer(&buf, ") ON %s FROM %s",
+ PQgetvalue(result, i, 4),
+ PQgetvalue(result, i, 1));
printTableAddFooter(&cont, buf.data);
}
{
printfPQExpBuffer(&buf,
"SELECT pub.pubname\n"
- " FROM pg_catalog.pg_publication pub\n"
- " LEFT JOIN pg_catalog.pg_publication_rel pr\n"
- " ON (pr.prpubid = pub.oid)\n"
- "WHERE pr.prrelid = '%s' OR pub.puballtables\n"
+ " FROM pg_catalog.pg_publication pub,\n"
+ " pg_catalog.pg_get_publication_tables(pub.pubname)\n"
+ "WHERE relid = '%s'\n"
"ORDER BY 1;",
oid);
}
/* Print server name */
- printfPQExpBuffer(&buf, "Server: %s",
+ printfPQExpBuffer(&buf, _("Server: %s"),
PQgetvalue(result, 0, 0));
printTableAddFooter(&cont, buf.data);
ftoptions = PQgetvalue(result, 0, 1);
if (ftoptions && ftoptions[0] != '\0')
{
- printfPQExpBuffer(&buf, "FDW Options: (%s)", ftoptions);
+ printfPQExpBuffer(&buf, _("FDW options: (%s)"), ftoptions);
printTableAddFooter(&cont, buf.data);
}
PQclear(result);
/* print inherited tables (exclude, if parent is a partitioned table) */
printfPQExpBuffer(&buf,
- "SELECT c.oid::pg_catalog.regclass"
- " FROM pg_catalog.pg_class c, pg_catalog.pg_inherits i"
- " WHERE c.oid=i.inhparent AND i.inhrelid = '%s'"
- " AND c.relkind != " CppAsString2(RELKIND_PARTITIONED_TABLE)
- " ORDER BY inhseqno;", oid);
+ "SELECT c.oid::pg_catalog.regclass"
+ " FROM pg_catalog.pg_class c, pg_catalog.pg_inherits i"
+ " WHERE c.oid=i.inhparent AND i.inhrelid = '%s'"
+ " AND c.relkind != " CppAsString2(RELKIND_PARTITIONED_TABLE)
+ " ORDER BY inhseqno;", oid);
result = PSQLexec(buf.data);
if (!result)
/* print child tables (with additional info if partitions) */
if (pset.sversion >= 100000)
printfPQExpBuffer(&buf,
- "SELECT c.oid::pg_catalog.regclass, pg_get_expr(c.relpartbound, c.oid)"
- " FROM pg_catalog.pg_class c, pg_catalog.pg_inherits i"
- " WHERE c.oid=i.inhrelid AND"
- " i.inhparent = '%s' AND"
- " EXISTS (SELECT 1 FROM pg_class c WHERE c.oid = '%s')"
- " ORDER BY c.oid::pg_catalog.regclass::pg_catalog.text;", oid, oid);
+ "SELECT c.oid::pg_catalog.regclass, pg_get_expr(c.relpartbound, c.oid)"
+ " FROM pg_catalog.pg_class c, pg_catalog.pg_inherits i"
+ " WHERE c.oid=i.inhrelid AND"
+ " i.inhparent = '%s' AND"
+ " EXISTS (SELECT 1 FROM pg_class c WHERE c.oid = '%s')"
+ " ORDER BY c.oid::pg_catalog.regclass::pg_catalog.text;", oid, oid);
else if (pset.sversion >= 80300)
printfPQExpBuffer(&buf,
- "SELECT c.oid::pg_catalog.regclass"
- " FROM pg_catalog.pg_class c, pg_catalog.pg_inherits i"
- " WHERE c.oid=i.inhrelid AND"
- " i.inhparent = '%s' AND"
- " EXISTS (SELECT 1 FROM pg_class c WHERE c.oid = '%s')"
- " ORDER BY c.oid::pg_catalog.regclass::pg_catalog.text;", oid, oid);
+ "SELECT c.oid::pg_catalog.regclass"
+ " FROM pg_catalog.pg_class c, pg_catalog.pg_inherits i"
+ " WHERE c.oid=i.inhrelid AND"
+ " i.inhparent = '%s' AND"
+ " EXISTS (SELECT 1 FROM pg_class c WHERE c.oid = '%s')"
+ " ORDER BY c.oid::pg_catalog.regclass::pg_catalog.text;", oid, oid);
else
printfPQExpBuffer(&buf, "SELECT c.oid::pg_catalog.regclass FROM pg_catalog.pg_class c, pg_catalog.pg_inherits i WHERE c.oid=i.inhrelid AND i.inhparent = '%s' ORDER BY c.relname;", oid);
{
/* display the list of child tables */
const char *ct = (tableinfo.relkind != RELKIND_PARTITIONED_TABLE) ?
- _("Child tables") : _("Partitions");
+ _("Child tables") : _("Partitions");
int ctw = pg_wcswidth(ct, strlen(ct), pset.encoding);
for (i = 0; i < tuples; i++)
" WHEN " CppAsString2(RELKIND_INDEX) " THEN '%s'"
" WHEN " CppAsString2(RELKIND_SEQUENCE) " THEN '%s'"
" WHEN 's' THEN '%s'"
- " WHEN " CppAsString2(RELKIND_FOREIGN_TABLE) " THEN '%s'"
- " WHEN " CppAsString2(RELKIND_PARTITIONED_TABLE) " THEN '%s'"
+ " WHEN " CppAsString2(RELKIND_FOREIGN_TABLE) " THEN '%s'"
+ " WHEN " CppAsString2(RELKIND_PARTITIONED_TABLE) " THEN '%s'"
" END as \"%s\",\n"
" pg_catalog.pg_get_userbyid(c.relowner) as \"%s\"",
gettext_noop("Schema"),
",\n NOT l.lanispl AS \"%s\",\n"
" l.lanplcallfoid::regprocedure AS \"%s\",\n"
" l.lanvalidator::regprocedure AS \"%s\",\n ",
- gettext_noop("Internal Language"),
- gettext_noop("Call Handler"),
+ gettext_noop("Internal language"),
+ gettext_noop("Call handler"),
gettext_noop("Validator"));
if (pset.sversion >= 90000)
appendPQExpBuffer(&buf, "l.laninline::regprocedure AS \"%s\",\n ",
- gettext_noop("Inline Handler"));
+ gettext_noop("Inline handler"));
printACLColumn(&buf, "l.lanacl");
}
printfPQExpBuffer(&buf,
"SELECT n.nspname as \"%s\",\n"
" t.typname as \"%s\",\n"
- " pg_catalog.format_type(t.typbasetype, t.typtypmod) as \"%s\",\n",
+ " pg_catalog.format_type(t.typbasetype, t.typtypmod) as \"%s\",\n",
gettext_noop("Schema"),
gettext_noop("Name"),
gettext_noop("Type"));
" WHERE c.oid = t.typcollation AND bt.oid = t.typbasetype AND t.typcollation <> bt.typcollation) as \"%s\",\n",
gettext_noop("Collation"));
appendPQExpBuffer(&buf,
- " CASE WHEN t.typnotnull THEN 'not null' END as \"%s\",\n"
+ " CASE WHEN t.typnotnull THEN 'not null' END as \"%s\",\n"
" t.typdefault as \"%s\",\n"
" pg_catalog.array_to_string(ARRAY(\n"
" SELECT pg_catalog.pg_get_constraintdef(r.oid, true) FROM pg_catalog.pg_constraint r WHERE t.oid = r.contypid\n"
initPQExpBuffer(&buf);
printfPQExpBuffer(&buf,
- "SELECT \n"
+ "SELECT\n"
" n.nspname as \"%s\",\n"
" p.prsname as \"%s\",\n"
" pg_catalog.obj_description(p.oid, 'pg_ts_parser') as \"%s\"\n"
- "FROM pg_catalog.pg_ts_parser p \n"
+ "FROM pg_catalog.pg_ts_parser p\n"
"LEFT JOIN pg_catalog.pg_namespace n ON n.oid = p.prsnamespace\n",
gettext_noop("Schema"),
gettext_noop("Name"),
initPQExpBuffer(&buf);
printfPQExpBuffer(&buf,
- "SELECT p.oid, \n"
- " n.nspname, \n"
- " p.prsname \n"
+ "SELECT p.oid,\n"
+ " n.nspname,\n"
+ " p.prsname\n"
"FROM pg_catalog.pg_ts_parser p\n"
"LEFT JOIN pg_catalog.pg_namespace n ON n.oid = p.prsnamespace\n"
);
initPQExpBuffer(&buf);
printfPQExpBuffer(&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"
- " FROM pg_catalog.pg_ts_parser p \n"
- " WHERE p.oid = '%s' \n"
- "UNION ALL \n"
- "SELECT '%s', \n"
- " p.prstoken::pg_catalog.regproc, \n"
- " pg_catalog.obj_description(p.prstoken, 'pg_proc') \n"
- " FROM pg_catalog.pg_ts_parser p \n"
- " WHERE p.oid = '%s' \n"
- "UNION ALL \n"
- "SELECT '%s', \n"
- " p.prsend::pg_catalog.regproc, \n"
- " pg_catalog.obj_description(p.prsend, 'pg_proc') \n"
- " FROM pg_catalog.pg_ts_parser p \n"
- " WHERE p.oid = '%s' \n"
- "UNION ALL \n"
- "SELECT '%s', \n"
- " p.prsheadline::pg_catalog.regproc, \n"
- " pg_catalog.obj_description(p.prsheadline, 'pg_proc') \n"
- " FROM pg_catalog.pg_ts_parser p \n"
- " WHERE p.oid = '%s' \n"
- "UNION ALL \n"
- "SELECT '%s', \n"
- " p.prslextype::pg_catalog.regproc, \n"
- " pg_catalog.obj_description(p.prslextype, 'pg_proc') \n"
- " FROM pg_catalog.pg_ts_parser p \n"
+ "SELECT '%s' AS \"%s\",\n"
+ " p.prsstart::pg_catalog.regproc AS \"%s\",\n"
+ " pg_catalog.obj_description(p.prsstart, 'pg_proc') as \"%s\"\n"
+ " FROM pg_catalog.pg_ts_parser p\n"
+ " WHERE p.oid = '%s'\n"
+ "UNION ALL\n"
+ "SELECT '%s',\n"
+ " p.prstoken::pg_catalog.regproc,\n"
+ " pg_catalog.obj_description(p.prstoken, 'pg_proc')\n"
+ " FROM pg_catalog.pg_ts_parser p\n"
+ " WHERE p.oid = '%s'\n"
+ "UNION ALL\n"
+ "SELECT '%s',\n"
+ " p.prsend::pg_catalog.regproc,\n"
+ " pg_catalog.obj_description(p.prsend, 'pg_proc')\n"
+ " FROM pg_catalog.pg_ts_parser p\n"
+ " WHERE p.oid = '%s'\n"
+ "UNION ALL\n"
+ "SELECT '%s',\n"
+ " p.prsheadline::pg_catalog.regproc,\n"
+ " pg_catalog.obj_description(p.prsheadline, 'pg_proc')\n"
+ " FROM pg_catalog.pg_ts_parser p\n"
+ " WHERE p.oid = '%s'\n"
+ "UNION ALL\n"
+ "SELECT '%s',\n"
+ " p.prslextype::pg_catalog.regproc,\n"
+ " pg_catalog.obj_description(p.prslextype, 'pg_proc')\n"
+ " FROM pg_catalog.pg_ts_parser p\n"
" WHERE p.oid = '%s';",
gettext_noop("Start parse"),
gettext_noop("Method"),
initPQExpBuffer(&buf);
printfPQExpBuffer(&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"
+ "SELECT t.alias as \"%s\",\n"
+ " t.description as \"%s\"\n"
+ "FROM pg_catalog.ts_token_type( '%s'::pg_catalog.oid ) as t\n"
"ORDER BY 1;",
gettext_noop("Token name"),
gettext_noop("Description"),
initPQExpBuffer(&buf);
printfPQExpBuffer(&buf,
- "SELECT \n"
+ "SELECT\n"
" n.nspname as \"%s\",\n"
" d.dictname as \"%s\",\n",
gettext_noop("Schema"),
if (verbose)
{
appendPQExpBuffer(&buf,
- " ( SELECT COALESCE(nt.nspname, '(null)')::pg_catalog.text || '.' || t.tmplname FROM \n"
- " pg_catalog.pg_ts_template t \n"
- " LEFT JOIN pg_catalog.pg_namespace nt ON nt.oid = t.tmplnamespace \n"
- " WHERE d.dicttemplate = t.oid ) AS \"%s\", \n"
- " d.dictinitoption as \"%s\", \n",
+ " ( SELECT COALESCE(nt.nspname, '(null)')::pg_catalog.text || '.' || t.tmplname FROM\n"
+ " pg_catalog.pg_ts_template t\n"
+ " LEFT JOIN pg_catalog.pg_namespace nt ON nt.oid = t.tmplnamespace\n"
+ " WHERE d.dicttemplate = t.oid ) AS \"%s\",\n"
+ " d.dictinitoption as \"%s\",\n",
gettext_noop("Template"),
gettext_noop("Init options"));
}
if (verbose)
printfPQExpBuffer(&buf,
- "SELECT \n"
+ "SELECT\n"
" n.nspname AS \"%s\",\n"
" t.tmplname AS \"%s\",\n"
" t.tmplinit::pg_catalog.regproc AS \"%s\",\n"
gettext_noop("Description"));
else
printfPQExpBuffer(&buf,
- "SELECT \n"
+ "SELECT\n"
" n.nspname AS \"%s\",\n"
" t.tmplname AS \"%s\",\n"
" pg_catalog.obj_description(t.oid, 'pg_ts_template') AS \"%s\"\n",
initPQExpBuffer(&buf);
printfPQExpBuffer(&buf,
- "SELECT \n"
+ "SELECT\n"
" n.nspname as \"%s\",\n"
" c.cfgname as \"%s\",\n"
" pg_catalog.obj_description(c.oid, 'pg_ts_config') as \"%s\"\n"
"FROM pg_catalog.pg_ts_config c\n"
- "LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.cfgnamespace \n",
+ "LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.cfgnamespace\n",
gettext_noop("Schema"),
gettext_noop("Name"),
gettext_noop("Description")
printfPQExpBuffer(&buf,
"SELECT c.oid, c.cfgname,\n"
- " n.nspname, \n"
- " p.prsname, \n"
- " np.nspname as pnspname \n"
- "FROM pg_catalog.pg_ts_config c \n"
- " LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.cfgnamespace, \n"
- " pg_catalog.pg_ts_parser p \n"
- " LEFT JOIN pg_catalog.pg_namespace np ON np.oid = p.prsnamespace \n"
+ " n.nspname,\n"
+ " p.prsname,\n"
+ " np.nspname as pnspname\n"
+ "FROM pg_catalog.pg_ts_config c\n"
+ " LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.cfgnamespace,\n"
+ " pg_catalog.pg_ts_parser p\n"
+ " LEFT JOIN pg_catalog.pg_namespace np ON np.oid = p.prsnamespace\n"
"WHERE p.oid = c.cfgparser\n"
);
initPQExpBuffer(&buf);
printfPQExpBuffer(&buf,
- "SELECT \n"
- " ( SELECT t.alias FROM \n"
- " pg_catalog.ts_token_type(c.cfgparser) AS t \n"
- " WHERE t.tokid = m.maptokentype ) AS \"%s\", \n"
- " pg_catalog.btrim( \n"
- " ARRAY( SELECT mm.mapdict::pg_catalog.regdictionary \n"
- " FROM pg_catalog.pg_ts_config_map AS mm \n"
- " WHERE mm.mapcfg = m.mapcfg AND mm.maptokentype = m.maptokentype \n"
- " ORDER BY mapcfg, maptokentype, mapseqno \n"
- " ) :: pg_catalog.text , \n"
- " '{}') AS \"%s\" \n"
- "FROM pg_catalog.pg_ts_config AS c, pg_catalog.pg_ts_config_map AS m \n"
- "WHERE c.oid = '%s' AND m.mapcfg = c.oid \n"
- "GROUP BY m.mapcfg, m.maptokentype, c.cfgparser \n"
+ "SELECT\n"
+ " ( SELECT t.alias FROM\n"
+ " pg_catalog.ts_token_type(c.cfgparser) AS t\n"
+ " WHERE t.tokid = m.maptokentype ) AS \"%s\",\n"
+ " pg_catalog.btrim(\n"
+ " ARRAY( SELECT mm.mapdict::pg_catalog.regdictionary\n"
+ " FROM pg_catalog.pg_ts_config_map AS mm\n"
+ " WHERE mm.mapcfg = m.mapcfg AND mm.maptokentype = m.maptokentype\n"
+ " ORDER BY mapcfg, maptokentype, mapseqno\n"
+ " ) :: pg_catalog.text,\n"
+ " '{}') AS \"%s\"\n"
+ "FROM pg_catalog.pg_ts_config AS c, pg_catalog.pg_ts_config_map AS m\n"
+ "WHERE c.oid = '%s' AND m.mapcfg = c.oid\n"
+ "GROUP BY m.mapcfg, m.maptokentype, c.cfgparser\n"
"ORDER BY 1;",
gettext_noop("Token"),
gettext_noop("Dictionaries"),
" quote_literal(option_value) FROM "
" pg_options_to_table(fdwoptions)), ', ') || ')' "
" END AS \"%s\"",
- gettext_noop("FDW Options"));
+ gettext_noop("FDW options"));
if (pset.sversion >= 90100)
appendPQExpBuffer(&buf,
" d.description AS \"%s\"",
gettext_noop("Type"),
gettext_noop("Version"),
- gettext_noop("FDW Options"),
+ gettext_noop("FDW options"),
gettext_noop("Description"));
}
" quote_literal(option_value) FROM "
" pg_options_to_table(umoptions)), ', ') || ')' "
" END AS \"%s\"",
- gettext_noop("FDW Options"));
+ gettext_noop("FDW options"));
appendPQExpBufferStr(&buf, "\nFROM pg_catalog.pg_user_mappings um\n");
" pg_options_to_table(ftoptions)), ', ') || ')' "
" END AS \"%s\",\n"
" d.description AS \"%s\"",
- gettext_noop("FDW Options"),
+ gettext_noop("FDW options"),
gettext_noop("Description"));
appendPQExpBufferStr(&buf,
"FROM pg_catalog.pg_depend\n"
"WHERE refclassid = 'pg_catalog.pg_extension'::pg_catalog.regclass AND refobjid = '%s' AND deptype = 'e'\n"
"ORDER BY 1;",
- gettext_noop("Object Description"),
+ gettext_noop("Object description"),
oid);
res = PSQLexec(buf.data);
PQExpBufferData buf;
PGresult *res;
printQueryOpt myopt = pset.popt;
- static const bool translate_columns[] = {false, false, false, false, false};
+ static const bool translate_columns[] = {false, false, false, false, false, false};
if (pset.sversion < 100000)
{
char sverbuf[32];
+
psql_error("The server (version %s) does not support publications.\n",
formatPGVersionNumber(pset.sversion, false,
sverbuf, sizeof(sverbuf)));
printfPQExpBuffer(&buf,
"SELECT pubname AS \"%s\",\n"
" pg_catalog.pg_get_userbyid(pubowner) AS \"%s\",\n"
+ " puballtables AS \"%s\",\n"
" pubinsert AS \"%s\",\n"
" pubupdate AS \"%s\",\n"
" pubdelete AS \"%s\"\n",
gettext_noop("Name"),
gettext_noop("Owner"),
+ gettext_noop("All tables"),
gettext_noop("Inserts"),
gettext_noop("Updates"),
gettext_noop("Deletes"));
describePublications(const char *pattern)
{
PQExpBufferData buf;
- int i;
- PGresult *res;
+ int i;
+ PGresult *res;
if (pset.sversion < 100000)
{
char sverbuf[32];
+
psql_error("The server (version %s) does not support publications.\n",
formatPGVersionNumber(pset.sversion, false,
sverbuf, sizeof(sverbuf)));
for (i = 0; i < PQntuples(res); i++)
{
const char align = 'l';
- int ncols = 3;
+ int ncols = 4;
int nrows = 1;
int tables = 0;
PGresult *tabres;
printfPQExpBuffer(&title, _("Publication %s"), pubname);
printTableInit(&cont, &myopt, title.data, ncols, nrows);
+ printTableAddHeader(&cont, gettext_noop("All tables"), true, align);
printTableAddHeader(&cont, gettext_noop("Inserts"), true, align);
printTableAddHeader(&cont, gettext_noop("Updates"), true, align);
printTableAddHeader(&cont, gettext_noop("Deletes"), true, align);
+ printTableAddCell(&cont, PQgetvalue(res, i, 2), false, false);
printTableAddCell(&cont, PQgetvalue(res, i, 3), false, false);
printTableAddCell(&cont, PQgetvalue(res, i, 4), false, false);
printTableAddCell(&cont, PQgetvalue(res, i, 5), false, false);
- if (puballtables)
- printfPQExpBuffer(&buf,
- "SELECT n.nspname, c.relname\n"
- "FROM pg_catalog.pg_class c,\n"
- " pg_catalog.pg_namespace n\n"
- "WHERE c.relnamespace = n.oid\n"
- " AND c.relkind = " CppAsString2(RELKIND_RELATION) "\n"
- " AND n.nspname <> 'pg_catalog'\n"
- " AND n.nspname <> 'information_schema'\n"
- "ORDER BY 1,2");
- else
+ if (!puballtables)
+ {
printfPQExpBuffer(&buf,
"SELECT n.nspname, c.relname\n"
"FROM pg_catalog.pg_class c,\n"
" AND pr.prpubid = '%s'\n"
"ORDER BY 1,2", pubid);
- tabres = PSQLexec(buf.data);
- if (!tabres)
- {
- printTableCleanup(&cont);
- PQclear(res);
- termPQExpBuffer(&buf);
- termPQExpBuffer(&title);
- return false;
- }
- else
- tables = PQntuples(tabres);
+ tabres = PSQLexec(buf.data);
+ if (!tabres)
+ {
+ printTableCleanup(&cont);
+ PQclear(res);
+ termPQExpBuffer(&buf);
+ termPQExpBuffer(&title);
+ return false;
+ }
+ else
+ tables = PQntuples(tabres);
- if (tables > 0)
- printTableAddFooter(&cont, _("Tables:"));
+ if (tables > 0)
+ printTableAddFooter(&cont, _("Tables:"));
- for (j = 0; j < tables; j++)
- {
- printfPQExpBuffer(&buf, " \"%s.%s\"",
- PQgetvalue(tabres, j, 0),
- PQgetvalue(tabres, j, 1));
+ for (j = 0; j < tables; j++)
+ {
+ printfPQExpBuffer(&buf, " \"%s.%s\"",
+ PQgetvalue(tabres, j, 0),
+ PQgetvalue(tabres, j, 1));
- printTableAddFooter(&cont, buf.data);
+ printTableAddFooter(&cont, buf.data);
+ }
+ PQclear(tabres);
}
- PQclear(tabres);
printTable(&cont, pset.queryFout, false, pset.logfile);
printTableCleanup(&cont);
PQExpBufferData buf;
PGresult *res;
printQueryOpt myopt = pset.popt;
- static const bool translate_columns[] = {false, false, false, false, false};
+ static const bool translate_columns[] = {false, false, false, false,
+ false, false};
if (pset.sversion < 100000)
{
char sverbuf[32];
+
psql_error("The server (version %s) does not support subscriptions.\n",
formatPGVersionNumber(pset.sversion, false,
sverbuf, sizeof(sverbuf)));
if (verbose)
{
appendPQExpBuffer(&buf,
+ ", subsynccommit AS \"%s\"\n"
", subconninfo AS \"%s\"\n",
+ gettext_noop("Synchronous commit"),
gettext_noop("Conninfo"));
}
"FROM pg_catalog.pg_subscription\n"
"WHERE subdbid = (SELECT oid\n"
" FROM pg_catalog.pg_database\n"
- " WHERE datname = current_database())");
+ " WHERE datname = current_database())");
processSQLNamePattern(pset.db, &buf, pattern, true, false,
NULL, "subname", NULL,