Re: BUG #19352: SQL Error messages do not include schema name along with table or data object name. - Mailing list pgsql-bugs

From Kirill Reshke
Subject Re: BUG #19352: SQL Error messages do not include schema name along with table or data object name.
Date
Msg-id CALdSSPhrTa8oqJpXm3TZVfkMUC5mgnFgrQXfs0chkjaG9YRu9Q@mail.gmail.com
Whole thread Raw
In response to BUG #19352: SQL Error messages do not include schema name along with table or data object name.  (PG Bug reporting form <noreply@postgresql.org>)
Responses Re: BUG #19352: SQL Error messages do not include schema name along with table or data object name.
Re: BUG #19352: SQL Error messages do not include schema name along with table or data object name.
List pgsql-bugs
On Fri, 12 Dec 2025 at 13:33, PG Bug reporting form
<noreply@postgresql.org> wrote:
>
> The following bug has been logged on the website:
>
> Bug reference:      19352
> Logged by:          David Keeshin
> Email address:      keeshd@keeshinds.com
> PostgreSQL version: 16.11
> Operating system:   Linux
> Description:
>
> Here's an actual error that I received:
>
> "Error moving summary data: Error in up_move_from_stage for control_id
> c5bcfbd9-1f20-42c1-bb0c-be626b3c15eb:
> insert or update on table "followup_data_flow_by_topic" violates
> foreign key constraint "followup_data_flow_by_topic_by_topic_id_fkey2" 23503
> CONTEXT: PL/pgSQL function interview.up_move_from_stage(uuid,boolean) line
> 166 at RAISE"
>
> It's confusing.  I have a "stage" schema and a "interview" schema in the
> database.  There is a "followup_data_flow_by_topic'  table in the stage
> "schema" and one in the "interview"  schema.  I did just noticed that the
> end of the message does include the schema name for the stored procedure -
> which by the was created as a  stored procedure, not a function.
>
> Ideally this error message would be clearer if the schema name was included
> with the data table or object name.  i.e.
>
> "Error moving summary data: Error in interview.up_move_from_stage for
> control_id c5bcfbd9-1f20-42c1-bb0c-be626b3c15eb:
> insert or update on table "interview.followup_data_flow_by_topic" violates
> foreign key constraint
> "interview.followup_data_flow_by_topic_by_topic_id_fkey2" 23503
> CONTEXT: PL/pgSQL function interview.up_move_from_stage(uuid,boolean) line
> 166 at RAISE"
>

Well...

>  foreign key constraint
> "interview.followup_data_flow_by_topic_by_topic_id_fkey2" 23503

I may be foolish but constraints are not schema-qualified, they just have names.

checkout this:

```
db1=# create schema sh;
CREATE SCHEMA
db1=# create table sh.t(i int);
CREATE TABLE
db1=# alter table sh.t add constraint c check ( i >  0);
ALTER TABLE
db1=# select conname from pg_constraint where conrelid = 'sh.t'::regclass ;
 conname
---------
 c
(1 row)
db1=# create table sh.t2 (i int);
CREATE TABLE
db1=# alter table sh.t2 add constraint c check ( i > 0);
ALTER TABLE
db1=# select conname from pg_constraint where conrelid = 'sh.t2'::regclass ;
 conname
---------
 c
(1 row)
```

So, including schema does not uniquely identify constraints either.

Speaking of fully-qualified relation name in error message:

Code which generates this uses RelationGetRelationName, as well as
many other places where we generate user-facing messages:

(errcode(ERRCODE_FOREIGN_KEY_VIOLATION),
errmsg("insert or update on table \"%s\" violates foreign key
constraint \"%s\"",
RelationGetRelationName(fk_rel),
NameStr(riinfo->conname)),


So, if we do anything about this, we need to change all of these
places... This is a big amount of work and would be HEAD-only. So, on
pg16, you will still face this behavior, I guess.


-- 
Best regards,
Kirill Reshke



pgsql-bugs by date:

Previous
From: PG Bug reporting form
Date:
Subject: BUG #19352: SQL Error messages do not include schema name along with table or data object name.
Next
From: Richard Guo
Date:
Subject: Re: GROUP BY ROLLUP queries on views trigger full table scans (index usage not optimized)