Отвечаю на свой вопрос. Пусть есть две транзакции, которые выполняются одновременно:
BEGIN;
INSERT INTO t (id) VALUES (1);
SELECT pg_sleep(10); /* рейс кондишон */
COMMIT;
И на id у нас unique constraint.
Че произойдет: одна из транзакций сразу прочухает, что произошел конфликт, и станет ЖДАТЬ, когда вторая транзакция завершится. Если во второй транзакции пройдет COMMIT, то ждущая повалится с "duplicate key value violates unique constraint". Если же вторая транзакция вместо COMMIT сделает ROLLBACK, то первая перестанет ждать и пойдет дальше.
Если же у нас инсертов много и они проходят в интересном порядке, то одна из транзакций свалится на "deadlock detected", а вторая пройдет.
В общем-то все очень просто и очевидно. Но смутные сомненья, они такие. Неочевидным был только то, ебнется ли инсерт сразу. Оказалось, что будет ждать завершения другой транзакции, и только тогда ебнется со спокойной совестью.