| From: | Peter Smith <smithpb2250(at)gmail(dot)com> |
|---|---|
| To: | surya poondla <suryapoondla4(at)gmail(dot)com> |
| Cc: | PostgreSQL Hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org>, "jiaoshuntian(at)gmail(dot)com" <jiaoshuntian(at)gmail(dot)com>, "nishant(dot)sharma(at)enterprisedb(dot)com" <nishant(dot)sharma(at)enterprisedb(dot)com>, "jim(dot)jones(at)uni-muenster(dot)de" <jim(dot)jones(at)uni-muenster(dot)de>, "niushiji(at)gmail(dot)com" <niushiji(at)gmail(dot)com> |
| Subject: | Re: PSQL schema "describe" \dn is not escaping quotes |
| Date: | 2026-09-02 09:19:19 |
| Message-ID: | CAHut+Pubc9z8wKQ0iiyvFVWSLQgqEzaaJd0wwdCVNq3yh+Uf=w@mail.gmail.com |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-hackers |
On Wed, Sep 2, 2026 at 9:48 AM surya poondla <suryapoondla4(at)gmail(dot)com> wrote:
>
> Hi Peter,
>
> Thanks for the patch. Nice review comments.
>
> I applied v3 on master and did some testing of my own. A few observations.
>
> 1) The patch fixes more than the reported case, which I think is worth calling out in the commit message. Because the old code compared
> n.nspname against the raw pattern text, the footer was silently missing for *any* double-quoted pattern, not just ones containing an embedded single quote:
>
> -- unpatched
> test=# \dn sch_a
> List of schemas
> Name | Owner
> -------+----------
> sch_a | postgres
> Included in publications:
> "pub_a"
>
> test=# \dn "sch_a"
> List of schemas
> Name | Owner
> -------+----------
> sch_a | postgres
> (1 row) <-- footer silently missing
>
>
> FWIW I checked describe.c for other places where a user-supplied pattern is interpolated into query text, and this is the only one
> every other use of 'pattern' is either a pg_log_error() message or goes through validateSQLNamePattern().
Done. Commit message is updated.
>
> 2) I'm less sure about switching this query to pattern matching. processSQLNamePattern() turns it into a regex match, so it can now
> match several schemas, but the footer belongs to the whole table rather than to any one row:
>
> -- v3
> test=# \dn sch*
> List of schemas
> Name | Owner
> -------+----------
> sch_a | postgres
> sch_b | postgres
> Included in publications:
> "pub_a"
> "pub_b"
>
> There's no way to tell which publication goes with which schema, and with "\dn *" you get every schema publication in the database lumped
> into one footer.
Thanks for reporting this issue!
It caused me to rewrite everything, but I think the patch is now much
better for having done it -- it now closely mimics the `describe
table` behavior.
>
> Minor nit:
> - One test line has a stray trailing semicolon:
> \d "it's my public table";
> psql strips it so it's harmless, but the neighbouring lines don't have one.
>
OK, the spurious semi-colon is removed.
I've also added more test cases for verified multiple schema/footers
with a common \dn pattern.
~~~
PSA patch v4.
======
Kind Regards,
Peter Smith.
Fujitsu Australia
| Attachment | Content-Type | Size |
|---|---|---|
| v4-0001-Fix-escapes-for-psql-describe-schema-patterns.patch | application/octet-stream | 14.9 KB |
| From | Date | Subject | |
|---|---|---|---|
| Next Message | David Geier | 2026-09-02 09:27:52 | Re: Add pg_stat_vfdcache view for VFD cache statistics |
| Previous Message | David Geier | 2026-09-02 09:16:04 | Re: Reduce build times of pg_trgm GIN indexes |