Commit 915379c3 authored by Peter Eisentraut's avatar Peter Eisentraut

psql: Improve display of "for all tables" publications

Show "All tables" property in \dRp and \dRp+.  Don't list tables for
such publications in \dRp+, since it's redundant and the list could be
very long.

Author: Masahiko Sawada <sawada.mshk@gmail.com>
Author: Jeff Janes <jeff.janes@gmail.com>
parent 6c6a1149
......@@ -5047,7 +5047,7 @@ listPublications(const char *pattern)
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)
{
......@@ -5064,11 +5064,13 @@ listPublications(const char *pattern)
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"));
......@@ -5145,7 +5147,7 @@ describePublications(const char *pattern)
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;
......@@ -5161,25 +5163,18 @@ describePublications(const char *pattern)
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"
......@@ -5214,6 +5209,7 @@ describePublications(const char *pattern)
printTableAddFooter(&cont, buf.data);
}
PQclear(tabres);
}
printTable(&cont, pset.queryFout, false, pset.logfile);
printTableCleanup(&cont);
......
......@@ -22,19 +22,19 @@ CREATE PUBLICATION testpub_xxx WITH (publish = 'cluster, vacuum');
ERROR: unrecognized "publish" value: "cluster"
\dRp
List of publications
Name | Owner | Inserts | Updates | Deletes
--------------------+--------------------------+---------+---------+---------
testpib_ins_trunct | regress_publication_user | t | f | f
testpub_default | regress_publication_user | f | t | f
Name | Owner | All tables | Inserts | Updates | Deletes
--------------------+--------------------------+------------+---------+---------+---------
testpib_ins_trunct | regress_publication_user | f | t | f | f
testpub_default | regress_publication_user | f | f | t | f
(2 rows)
ALTER PUBLICATION testpub_default SET (publish = 'insert, update, delete');
\dRp
List of publications
Name | Owner | Inserts | Updates | Deletes
--------------------+--------------------------+---------+---------+---------
testpib_ins_trunct | regress_publication_user | t | f | f
testpub_default | regress_publication_user | t | t | t
Name | Owner | All tables | Inserts | Updates | Deletes
--------------------+--------------------------+------------+---------+---------+---------
testpib_ins_trunct | regress_publication_user | f | t | f | f
testpub_default | regress_publication_user | f | t | t | t
(2 rows)
--- adding tables
......@@ -75,6 +75,13 @@ Indexes:
Publications:
"testpub_foralltables"
\dRp+ testpub_foralltables
Publication testpub_foralltables
All tables | Inserts | Updates | Deletes
------------+---------+---------+---------
t | t | t | f
(1 row)
DROP TABLE testpub_tbl2;
DROP PUBLICATION testpub_foralltables;
CREATE TABLE testpub_tbl3 (a int);
......@@ -83,18 +90,18 @@ CREATE PUBLICATION testpub3 FOR TABLE testpub_tbl3;
CREATE PUBLICATION testpub4 FOR TABLE ONLY testpub_tbl3;
\dRp+ testpub3
Publication testpub3
Inserts | Updates | Deletes
---------+---------+---------
t | t | t
All tables | Inserts | Updates | Deletes
------------+---------+---------+---------
f | t | t | t
Tables:
"public.testpub_tbl3"
"public.testpub_tbl3a"
\dRp+ testpub4
Publication testpub4
Inserts | Updates | Deletes
---------+---------+---------
t | t | t
All tables | Inserts | Updates | Deletes
------------+---------+---------+---------
f | t | t | t
Tables:
"public.testpub_tbl3"
......@@ -113,9 +120,9 @@ CREATE PUBLICATION testpub_fortbl FOR TABLE testpub_tbl1;
ERROR: publication "testpub_fortbl" already exists
\dRp+ testpub_fortbl
Publication testpub_fortbl
Inserts | Updates | Deletes
---------+---------+---------
t | t | t
All tables | Inserts | Updates | Deletes
------------+---------+---------+---------
f | t | t | t
Tables:
"pub_test.testpub_nopk"
"public.testpub_tbl1"
......@@ -159,9 +166,9 @@ Publications:
\dRp+ testpub_default
Publication testpub_default
Inserts | Updates | Deletes
---------+---------+---------
t | t | t
All tables | Inserts | Updates | Deletes
------------+---------+---------+---------
f | t | t | t
Tables:
"pub_test.testpub_nopk"
"public.testpub_tbl1"
......@@ -204,9 +211,9 @@ DROP VIEW testpub_view;
DROP TABLE testpub_tbl1;
\dRp+ testpub_default
Publication testpub_default
Inserts | Updates | Deletes
---------+---------+---------
t | t | t
All tables | Inserts | Updates | Deletes
------------+---------+---------+---------
f | t | t | t
(1 row)
-- fail - must be owner of publication
......@@ -217,9 +224,9 @@ RESET ROLE;
ALTER PUBLICATION testpub_default RENAME TO testpub_foo;
\dRp testpub_foo
List of publications
Name | Owner | Inserts | Updates | Deletes
-------------+--------------------------+---------+---------+---------
testpub_foo | regress_publication_user | t | t | t
Name | Owner | All tables | Inserts | Updates | Deletes
-------------+--------------------------+------------+---------+---------+---------
testpub_foo | regress_publication_user | f | t | t | t
(1 row)
-- rename back to keep the rest simple
......@@ -227,9 +234,9 @@ ALTER PUBLICATION testpub_foo RENAME TO testpub_default;
ALTER PUBLICATION testpub_default OWNER TO regress_publication_user2;
\dRp testpub_default
List of publications
Name | Owner | Inserts | Updates | Deletes
-----------------+---------------------------+---------+---------+---------
testpub_default | regress_publication_user2 | t | t | t
Name | Owner | All tables | Inserts | Updates | Deletes
-----------------+---------------------------+------------+---------+---------+---------
testpub_default | regress_publication_user2 | f | t | t | t
(1 row)
DROP PUBLICATION testpub_default;
......
......@@ -45,6 +45,7 @@ ALTER PUBLICATION testpub_foralltables SET TABLE pub_test.testpub_nopk;
SELECT pubname, puballtables FROM pg_publication WHERE pubname = 'testpub_foralltables';
\d+ testpub_tbl2
\dRp+ testpub_foralltables
DROP TABLE testpub_tbl2;
DROP PUBLICATION testpub_foralltables;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment