Обсуждение: How to drop an trigger
I've created quite a few foreign key constraints in the database that I
am currently working on, and now that I've altered the structure and
dropped a table that had a foreign key reference to a couple of other
tables, I need to get rid of those foreign keys (they weren't dropped
automagically with the table), as I get errors on trying to update those
tables.
Trouble is that the foreign keys show up in a schema dump as <unnamed>
triggers (AFAIK there is no other way to display foreign key
constraints) which I don't know how to drop. Here's an example:
\connect - frank
--
-- TOC Entry ID 56 (OID 52367)
--
-- Name: "RI_ConstraintTrigger_52366" Type: TRIGGER Owner: frank
--
CREATE CONSTRAINT TRIGGER "<unnamed>" AFTER DELETE ON "index" NOT
DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE
"RI_FKey_cascade_del" ('<unnamed>', 'legende', 'index', 'UNSPECIFIED',
'platz', 'id');
I tried dropping it with
=# drop trigger RI_ConstraintTrigger_52366 on index;
which fails with
ERROR: DropTrigger: there is no trigger ri_constrainttrigger_52366 on
relation index
What to do? And more broadly, what's the recommended way to deal with
this in general? Avoid creating <unnamed> triggers by always creating named
foreign keys with something like
ALTER TABLE distributors ADD CONSTRAINT distfk FOREIGN KEY (address)
REFERENCES addresses(address) MATCH FULL;
(from Bruce's book)?
Regards, Frank
On Thu, Mar 08, 2001 at 04:42:46PM +0100, Frank Joerdens wrote: > I've created quite a few foreign key constraints in the database that I > am currently working on, and now that I've altered the structure and > dropped a table that had a foreign key reference to a couple of other > tables, I need to get rid of those foreign keys (they weren't dropped > automagically with the table), as I get errors on trying to update those > tables. Just an idea: Is it safe to just delete the corresponding row in pg_trigger? Regards, Frank
On Thu, Mar 08, 2001 at 05:06:29PM +0100, Frank Joerdens wrote: > On Thu, Mar 08, 2001 at 04:42:46PM +0100, Frank Joerdens wrote: > > I've created quite a few foreign key constraints in the database that I > > am currently working on, and now that I've altered the structure and > > dropped a table that had a foreign key reference to a couple of other > > tables, I need to get rid of those foreign keys (they weren't dropped > > automagically with the table), as I get errors on trying to update those > > tables. > > Just an idea: Is it safe to just delete the corresponding row in > pg_trigger? No, it ain't: After deleting the rows corresponding to the offending triggers in pg_trigger, I can't vacuum, or dump. - Frank
Frank Joerdens <frank@joerdens.de> writes:
>> Just an idea: Is it safe to just delete the corresponding row in
>> pg_trigger?
> No, it ain't: After deleting the rows corresponding to the offending
> triggers in pg_trigger, I can't vacuum, or dump.
You need to adjust the reltriggers counts in the associated pg_class
entries, too.
regards, tom lane