From: Tom Lane <tgl@sss.pgh.pa.us>
To: exclusion@gmail.com
Cc: pgsql-bugs@lists.postgresql.org
Subject: Re: BUG #18517: Dropping a table referenced by an initially deferred foreign key fails with an error
Date: Thu, 20 Jun 2024 12:43:36 -0400
Message-ID: <366498.1718901816@sss.pgh.pa.us> (raw)
In-Reply-To: <18517-af2d19882240902c@postgresql.org>
References: <18517-af2d19882240902c@postgresql.org>
PG Bug reporting form <noreply@postgresql.org> writes:
> The following script:
> CREATE TABLE pkt (id int PRIMARY KEY);
> CREATE TABLE fkt (id int PRIMARY KEY, fk int REFERENCES pkt INITIALLY
> DEFERRED);
> INSERT INTO pkt VALUES (1);
> BEGIN;
> INSERT INTO fkt VALUES (101, 1);
> DROP TABLE pkt CASCADE;
> COMMIT;
> fails on commit with a weird error:
> ERROR: relation 16390 has no triggers
Oh, interesting. Furthermore, if I add an unrelated trigger to fkt
so that there's still a trigdesc, then I reach
ERROR: XX000: could not find trigger 42452
LOCATION: AfterTriggerExecute, trigger.c:4303
So what this demonstrates is that we should not consider it an
error if afterTriggerInvokeEvents finds an event for a trigger
that no longer exists.
Perhaps an alternative could be to run through the pending events
at DROP time and throw an error if there's an unfired event for the
trigger. That doesn't sound better to me though. I see no very
good reason why we shouldn't allow the above sequence of commands
and treat the constraint as no longer to be enforced.
regards, tom lane
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Reply to all the recipients using the --to and --cc options:
reply via email
To: pgsql-bugs@postgresql.org
Cc: tgl@sss.pgh.pa.us, exclusion@gmail.com, pgsql-bugs@lists.postgresql.org
Subject: Re: BUG #18517: Dropping a table referenced by an initially deferred foreign key fails with an error
In-Reply-To: <366498.1718901816@sss.pgh.pa.us>
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox