Thread
-
PSQL - prevent describe listing tables that are already in listed schemas
Peter Smith <smithpb2250@gmail.com> — 2026-05-18T03:20:14Z
I noticed a quirk of the psql publication "describe" command (\dRp+). Background: It is permitted for a FOR TABLE publication to overlap with a FOR TABLES IN SCHEMA publication. When a specified table is a member of a published schema (and there is no column list), then there is no clash -- it is just silently absorbed by the schema superset. So, the following is fine: CREATE SCHEMA myschema; CREATE TABLE t99(c int); CREATE TABLE myschema.t1(c int); CREATE PUBLICATION pub1 FOR TABLES IN SCHEMA myschema, TABLE myschema.t1, t99; However, I noticed that \dRp+ displays this publication with table "myschema.t1" still separately listed: e.g. CURRENT BEHAVIOUR test_pub=# \dRp+ pub1 Publication pub1 Owner | All tables | All sequences | Inserts | Updates | Deletes | Truncates | Generated columns | Via root | Descri ption ----------+------------+---------------+---------+---------+---------+-----------+-------------------+----------+------- ------ postgres | f | f | t | t | t | t | none | f | Tables: "myschema.t1" "public.t99" Tables from schemas: "myschema" ~~~ IMO it would make more sense if a table is *not* displayed separately when the schema superset is also present. e.g. OUTPUT AFTER PATCHED test_pub=# \dRp+ pub1 Publication pub1 Owner | All tables | All sequences | Inserts | Updates | Deletes | Truncates | Generated columns | Via root | Descri ption ----------+------------+---------------+---------+---------+---------+-----------+-------------------+----------+------- ------ postgres | f | f | t | t | t | t | none | f | Tables: "public.t99" Tables from schemas: "myschema" ====== Here are a couple more reasons why I think this patch is helpful: 1. If the specified table had a row filter, then it is confusing to display that row filter under "Tables:" when at the same time the DOCS [2] says "The row filter on a table becomes redundant if FOR TABLES IN SCHEMA is specified and the table belongs to the referred schema." 2. The output will become still more confusing after the FOR TABLES IN SCHEMA EXCEPT gets implemented [1]. Because it is not obvious, you need to read this a couple of times to be sure what is in and out. e.g. Output with the EXCEPT patch applied: Tables: "myschema2.t2" Tables from schemas: "myschema2" Except tables: "myschema2.t1" ~~~ PSA patch v1. Thoughts? ====== [1] https://www.postgresql.org/message-id/flat/CABdArM5sw4Q1ZU8HGdo4BSc1A_%2B8xtUNq17j6wcir%3DyMUy19Cg%40mail.gmail.com [2] https://www.postgresql.org/docs/devel/sql-createpublication.html Kind Regards, Peter Smith. Fujitsu Australia