Обсуждение: Adding Foreign Key constraints outside of table def.
Hello all,
I need to add foreign key support outside of the table via the
CREATE CONSTRAINT TRIGGER .. command.
1. Is there a way to add it without worrying about the
syntax of "RI_FKey_..()" e.g. (this would be nice if it worked)
ADD CONSTRAINT $fk.LocalColumnNames FOREIGN KEY ($fk.LocalColumnNames)
REFERENCES $fk.ForeignTableName ($fk.ForeignColumnNames)
ON DELETE set null, ON UPDATE cascade;
2. assuming no for #1 (the on delete and on update is not accepted)
I need to do the following:
CREATE CONSTRAINT TRIGGER "<unnamed>" AFTER UPDATE ON "teamowner"
NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE
"RI_FKey_cascade_upd" ('<unnamed>', 'league', 'teamowner', 'UNSPECIFIED', ' leagueownerid', 'id');
The problem is that I am unable to remove the trigger <unnamed>
drop trigger name on table does not work.
I tried "unnamed", "<unnamed>"
I need to drop the triggers in case I reload the same schema.
3. If I drop a table, how come the constainsts for that
table are NOT dropped as well?
4. for circular references,
Table A references B
B references C
C references A
is it impossible to do an insert (assuming all the foreign key
constraints are set up) ?
thanks
mike
> 1. Is there a way to add it without worrying about the > syntax of "RI_FKey_..()" e.g. (this would be nice if it worked) > > ADD CONSTRAINT $fk.LocalColumnNames FOREIGN KEY ($fk.LocalColumnNames) > REFERENCES $fk.ForeignTableName ($fk.ForeignColumnNames) > ON DELETE set null, ON UPDATE cascade; Here is how I added a foreign key to a table after the fact: ALTER TABLE foo ADD FOREIGN KEY (bar) REFERENCES foo2 (bar2) ON DELETE SET NULL; Haven't actually tried within the ADD CONSTRAINST syntax. > 2.... skipped > 3. If I drop a table, how come the constainsts for that > table are NOT dropped as well? I don't know about this one, I hope someone more knowledgable will step in. I'm surprised if this is indeed the behavior. > 4. for circular references, > Table A references B > B references C > C references A > > is it impossible to do an insert (assuming all the foreign key > constraints are set up) ? You'll have to set up at least two of the constraints as INITIALLY DEFERRED, then perform any inserts to all three tables inside of a transaction. Greg
thank you ! > ALTER TABLE foo ADD FOREIGN KEY (bar) REFERENCES foo2 (bar2) ON DELETE SET > NULL; this works (and when you drop the table, they get dropped as well). It's only when you ADD CONSTRAINTS. On Fri, Jun 22, 2001 at 11:31:48AM -0400, Gregory Wood wrote: > > 1. Is there a way to add it without worrying about the > > syntax of "RI_FKey_..()" e.g. (this would be nice if it worked) > > > > ADD CONSTRAINT $fk.LocalColumnNames FOREIGN KEY > ($fk.LocalColumnNames) > > REFERENCES $fk.ForeignTableName ($fk.ForeignColumnNames) > > ON DELETE set null, ON UPDATE cascade; > > Here is how I added a foreign key to a table after the fact: > > ALTER TABLE foo ADD FOREIGN KEY (bar) REFERENCES foo2 (bar2) ON DELETE SET > NULL; > > Haven't actually tried within the ADD CONSTRAINST syntax. > > > 2.... skipped > > > 3. If I drop a table, how come the constainsts for that > > table are NOT dropped as well? > > I don't know about this one, I hope someone more knowledgable will step in. > I'm surprised if this is indeed the behavior. > > > 4. for circular references, > > Table A references B > > B references C > > C references A > > > > is it impossible to do an insert (assuming all the foreign key > > constraints are set up) ? > > You'll have to set up at least two of the constraints as INITIALLY DEFERRED, > then perform any inserts to all three tables inside of a transaction. > > Greg -- ------------------------------------------------- I am Vinz, Vinz Clortho. Keymaster of Gozer, Volguus Zildrohar, Lord of the Sebouillia. Are you the Gatekeeper? -------------------------------------------------