BUG #16265: psql shows (unfolded) relation name in quotes

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

BUG #16265: psql shows (unfolded) relation name in quotes

PG Doc comments form
The following bug has been logged on the website:

Bug reference:      16265
Logged by:          Jose Luis Tallon
Email address:      [hidden email]
PostgreSQL version: 12.1
Operating system:   Linux
Description:        

When dealing with schemas containing non-all-lowercase names, psql error
messages can be confusing.

Reproducer below:
-------------------
test=> CREATE TABLE "Schedule";
CREATE TABLE
test=> \dt "Schedule"
          List of relations
 Schema |   Name   | Type  |  Owner  
--------+----------+-------+----------
 public | Schedule | table | jltallon
(1 row)
test=> \d+ Schedule
Did not find any relation named "Schedule".
-------------------

EXPECTED:
-------------------
test=> \d+ Schedule
Did not find any relation named "schedule".
-------------------

Please note that the only difference lies in case-folding of the unquoted
relation name: psql copies the relation name verbatim to the output message,
whereas it should case-fold it according to standard Postgres rules.

Reply | Threaded
Open this post in threaded view
|

Re: BUG #16265: psql shows (unfolded) relation name in quotes

Tom Lane-2
PG Bug reporting form <[hidden email]> writes:
> -------------------
> test=> \d+ Schedule
> Did not find any relation named "Schedule".
> -------------------
> EXPECTED:
> -------------------
> test=> \d+ Schedule
> Did not find any relation named "schedule".
> -------------------

Yeah, it just reports what you typed.  The difficulty in doing differently
is that what you typed might not be *meant* to be interpreted literally,
because it's a pattern not a simple name.  What should we do for example
with

regression=# \d+ foo*
Did not find any relation named "foo*".

A more interesting example, perhaps, is that these don't mean the same
thing:

regression=# \d+ "Foo*"
Did not find any relation named ""Foo*"".
regression=# \d+ "Foo"*
Did not find any relation named ""Foo"*".

(If I had a table named "Foot", the first case wouldn't find it but
the second would.)  I'm not clear on how we could report a post-processed
version of the input that would distinguish these in a non-confusing way.

Part of the issue is that the double-quote characters are being used in
two different ways.  The ones that the error message is wrapping around
the regurgitated input are not to be confused with quotes used in the
input; they're just there to separate the fixed and variable parts of
the message.  This is a little easier to follow in some other languages
where different quoting characters are used in error messages, but in
English we've concluded we just have to live with it.

tl;dr: it's not that obvious what would be an improvement here.

                        regards, tom lane