PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Quando o Postgres verifica restrições exclusivas?


Postgres decide verificar restrições do tipo IMMEDIATELY em um momento diferente do proposto no padrão SQL.

Especificamente, a documentação para SET CONSTRAINTS afirma (grifo meu):

O Postgres escolhe executar esta consulta usando um plano que resulta em uma colisão temporária para sort_order e IMEDIATAMENTE falha. Observe que isso significa que para o mesmo esquema e os mesmos dados, a mesma consulta pode funcionar ou falhar, dependendo do plano de execução.

Você terá que fazer a restrição DEFERRABLE ou DEFERRABLE INITIALLY DEFERRED , que atrasa a verificação da restrição até o final da transação ou até o ponto em que uma instrução SET CONSTRAINTS ... IMMEDIATE É executado.

Adendo do comentário de @HansGinzel: