Mikheev, Vadim wrote: > Try this for both FK tables: > > create table tmp2(idx2 int4, col2 int4, constraint > tmpcon2 foreign key(col2) references tmp1(idx) INITIALLY DEFERRED); > > This will defer constraint checks till transaction commit... > though constraint triggers should use SnapshotDirty instead of > SELECT FOR UPDATE anyway. > > Did you consider this, Jan? > > Vadim Whenever the checks are done, the transaction inserting a new reference to the key must ensure that this key cannot get deleted until it is done and it's newly inserted reference is visible to others. Otherwise a referential action, preventing referenced key deletion (or other action) wouldn't see those and it would be possible to violate the constraint. I don't see any other way doing it than obtaining a lock. Using SnapshotDirty would mean, that one transaction could DELETE a reference, then another transaction removes the primary key (because using Dirty the DELETE is already visible), but now the first transaction rolls back. Voila, constraint violated. Jan -- #======================================================================# # It's easier to get forgiveness for being wrong than for being right. # # Let's break this rule - forgive me. # #================================================== [EMAIL PROTECTED] #