| From: | Peter Smith <smithpb2250(at)gmail(dot)com> |
|---|---|
| To: | Jim Jones <jim(dot)jones(at)uni-muenster(dot)de> |
| Cc: | PostgreSQL Hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org> |
| Subject: | Re: PSQL - prevent describe listing tables that are already in listed schemas |
| Date: | 2026-05-19 23:59:46 |
| Message-ID: | CAHut+PvfAQQTaV4qQzivBx_LLhveA0h=ugy_MRRR+NjwndNPgg@mail.gmail.com |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-hackers |
On Tue, May 19, 2026 at 10:08 PM Jim Jones <jim(dot)jones(at)uni-muenster(dot)de> wrote:
>
> On 19/05/2026 09:08, Peter Smith wrote:
> > Thanks for reviewing and testing my patch. PSA v2 with that missing \n restored.
>
> LGTM.
>
> In the same light, we might also want to take a look at \d+. Currently
> it can display the publication twice:
>
> postgres=# \d+ s.t2
> Table "s.t2"
> Column | Type | Collation | Nullable | Default | Storage |
> Compression | Stats target | Description
> --------+---------+-----------+----------+---------+---------+-------------+--------------+-------------
> c | integer | | | | plain |
> | |
> Included in publications:
> "pub1" WHERE (c > 42)
> "pub1"
> Access method: heap
>
>
> Adding a similar logic to describeOneTableDetails might do the trick:
>
> " AND NOT EXISTS (\n"
> " SELECT 1\n"
> " FROM pg_catalog.pg_publication_namespace pn\n"
> " WHERE pn.pnpubid = p.oid\n"
> " AND pn.pnnspid = c.relnamespace)\n",
>
> ==============
>
> Example:
>
> postgres=# CREATE SCHEMA s;
> CREATE TABLE public.t1(c int);
> CREATE TABLE s.t2(c int);
> CREATE TABLE s.t3(c int);
> CREATE TABLE s.t4(c int);
> CREATE PUBLICATION pub1 FOR
> TABLES IN SCHEMA s,
> TABLE s.t3, s.t4,
> s.t2 WHERE (c > 42),
> public.t1;
>
> postgres=# \d+ s.t2
> Table "s.t2"
> Column | Type | Collation | Nullable | Default | Storage |
> Compression | Stats target | Description
> --------+---------+-----------+----------+---------+---------+-------------+--------------+-------------
> c | integer | | | | plain |
> | |
> Included in publications:
> "pub1"
> Access method: heap
>
> postgres=# CREATE PUBLICATION pub2 FOR TABLE s.t2;
> CREATE PUBLICATION
> postgres=# \d+ s.t2
> Table "s.t2"
> Column | Type | Collation | Nullable | Default | Storage |
> Compression | Stats target | Description
> --------+---------+-----------+----------+---------+---------+-------------+--------------+-------------
> c | integer | | | | plain |
> | |
> Included in publications:
> "pub1"
> "pub2"
> Access method: heap
>
> postgres=# \d+ s.t3
> Table "s.t3"
> Column | Type | Collation | Nullable | Default | Storage |
> Compression | Stats target | Description
> --------+---------+-----------+----------+---------+---------+-------------+--------------+-------------
> c | integer | | | | plain |
> | |
> Included in publications:
> "pub1"
> Access method: heap
>
> postgres=# \d public.t1
> Table "public.t1"
> Column | Type | Collation | Nullable | Default
> --------+---------+-----------+----------+---------
> c | integer | | |
> Included in publications:
> "pub1"
>
>
> What do you think?
> PSA a POC in v3-0002.
>
I agree we should address that \d+ quirk at the same time.
Thanks for finding/fixing it in v3-0002.
Your 0002 patch works for me, although I'm thinking those SQL fixes
ought to be made more similar:
1. Both use "n.oid NOT IN (SELECT pn.pnnspid ..."
2. Or both use "AND NOT EXISTS (SELECT 1 FROM ... WHERE ...)"
~
PSA v4, where I have combined the patches, and chosen your SQL style
for my previous \dRp+ fix.
Apparently, there was no existing test case to demonstrate that \d+
case you found. Do we need to bother adding one?
======
Kind Regards,
Peter Smith.
Fujitsu Australia
| Attachment | Content-Type | Size |
|---|---|---|
| v4-0001-Fix-psql-duplicate-items-for-dRp-and-d.patch | application/octet-stream | 4.3 KB |
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Chao Li | 2026-05-20 01:00:29 | Avoid leaking system path from pg_available_extensions |
| Previous Message | Chao Li | 2026-05-19 23:36:32 | Re: Fix SPLIT PARTITION bound-overlap bug and other improvements |