Índices exclusivos são avaliados por linha e não por instrução (o que é, por exemplo, diferente da implementação do Oracle)
A solução para este problema é usar uma única restrição que pode ser diferido e, portanto, é avaliado no final da transação.
Então em vez disso do índice exclusivo, defina uma restrição:
alter table test add constraint test_idx_pos unique (pos)
deferrable initially deferred;