Уникалните индекси се оценяват за ред, а не за израз (което е например различно от изпълнението на Oracle)
Решението на този проблем е да се използва уникално ограничение който може да бъде отложен и по този начин се оценява в края на сделката.
Така чевместо на уникалния индекс, дефинирайте ограничение:
alter table test add constraint test_idx_pos unique (pos)
deferrable initially deferred;