pgsql-bugs(at)postgresql(dot)org writes:
> delete something that referential triggers from tran 1 just checked and are relying on.
> commit
> tran 2 triggers see pre-tran 1 data and think its ok to delete.
> tran 2 finishes before tran 1.
> tran 1 already checked that tran 2 row and thinks its fine, commit
> finishes.
This is exactly what the SELECT FOR UPDATEs are in there to prevent.
regards, tom lane