Ben <bench(at)silentmedia(dot)com> writes:
> Doesn't select ... for update only lock the rows returned in the select?
Right.
> In my case, I'm worried about situations when no rows will be returned
> and two separate transactions will try to insert the same key.
Pretty much the only thing you can do about that is to take an exclusive
table-level lock. This is simple but pretty awful for concurrency
(since the lock blocks everyone else from inserting ANY key, not only
the one you are inserting).
Consider using a sequence object to generate the keys, instead.
regards, tom lane