Thread: 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