Re: Add schema-qualified relnames in constraint error messages. - Mailing list pgsql-hackers

From Shulgin, Oleksandr
Subject Re: Add schema-qualified relnames in constraint error messages.
Date
Msg-id CACACo5Rh1G-YKCr4X3sWkb6dzCuJcMrxJ8hABymtEmw67HECpw@mail.gmail.com
Whole thread Raw
In response to Re: Add schema-qualified relnames in constraint error messages.  (Jim Nasby <Jim.Nasby@BlueTreble.com>)
Responses Re: Add schema-qualified relnames in constraint error messages.  ("Shulgin, Oleksandr" <oleksandr.shulgin@zalando.de>)
List pgsql-hackers
On Wed, Jan 6, 2016 at 5:06 AM, Jim Nasby <Jim.Nasby@bluetreble.com> wrote:
On 1/5/16 9:16 PM, Tom Lane wrote:
Jim Nasby <Jim.Nasby@bluetreble.com> writes:
FWIW, I suspect very few people know about the verbosity setting (I
didn't until a few months ago...) Maybe psql should hint about it the
first time an error is reported in a session.

Actually, what'd be really handy IMO is something to regurgitate the
most recent error in verbose mode, without making a permanent session
state change.  Something like

regression=# insert into bar values(1);
ERROR:  insert or update on table "bar" violates foreign key constraint "bar_f1_fkey"
DETAIL:  Key (f1)=(1) is not present in table "foo".
regression=# \saywhat
ERROR:  23503: insert or update on table "bar" violates foreign key constraint "bar_f1_fkey"
DETAIL:  Key (f1)=(1) is not present in table "foo".
SCHEMA NAME:  public
TABLE NAME:  bar
CONSTRAINT NAME:  bar_f1_fkey
LOCATION:  ri_ReportViolation, ri_triggers.c:3326
regression=#

Not sure how hard that would be to do within psql's current structure.

At first glance, it looks like it just means changing AcceptResult() to use PQresultErrorField in addition to PQresultErrorMessage, and stuffing the results somewhere. And of course adding \saywhat to the psql parser, but maybe someone more versed in psql code can verify that.

If it is that simple, looks like another good beginner hacker task. :)

Sorry, I couldn't resist it: I was too excited to learn such option existed. :-)

Please find attached a POC patch, using \errverbose for the command name.  Unfortunately, I didn't see a good way to contain the change in psql only and had to change libpq, adding new interface PQresultBuildErrorMessage().  Also, what I don't like very much is that we need to keep track of the last result from last SendQuery() in psql's pset.  So in my view this is sort of a dirty hack that works nonetheless.

Cheers!
--
Alex

Attachment

pgsql-hackers by date:

Previous
From: Thom Brown
Date:
Subject: Re: Optimization for updating foreign tables in Postgres FDW
Next
From: Tom Lane
Date:
Subject: Re: Regression caused by recent change to initdb?