On Mon, 19 Mar 2001, Josh Berkus wrote:
> Stephan,
>
> > Yeah, it doesn't play nice with alter table at all. :(
> > Actually, for recreating -- All you really need to do is kill the
> > three triggers that it creates (drop trigger should work) and use
> > alter table to add them again.
>
> How can I drop them if they are <unnamed> triggers? I've been doing
> that by editing pg_trigger, but that just got me into a system table
> mess that it took 2 hours to fix ... and lost me half my foriegn keys to
> boot.
You can use the real trigger name (tgname) and drop trigger, but you
need to double quote the name:
drop trigger "RI_ConstraintTrigger_<n>" on <table>;
... (for all three)
> Is there, perhaps, a way I can name my constraints in the original
> CREATE TABLE statement? Aha! I see ... I never noticed the optional
> [CONSTRAINT constraint_name] phrase before. 'S what I get for crossing
> over from Transact-SQL without retraining!
> > You could do this (4 is unnecessary and 3 and 5 can be combined),
> > although
> > I think you might be better off using alter table add constraint to
> > do
> > that.
>
> I'm interested in the approach for another reason. I have a number of
> tables that must match a NON-UNIQUE value in a reference table, and thus
> I'd like to test them against a query or view.
Well, if you're going against non-unique values then the referential
actions aren't really meaningful anymore [you'd have to look at
match partial's semantics, probably], and you'd probably need to
reimplement that part.
In general you can add the constraint triggers the same way pg_dump does.