PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Quand Postgres vérifie-t-il les contraintes uniques ?

Postgres décide de vérifier les contraintes de type IMMEDIATELY à un moment différent de celui proposé dans la norme SQL.

Plus précisément, la documentation pour SET CONSTRAINTS déclare (c'est moi qui souligne):

Postgres choisit d'exécuter cette requête en utilisant un plan qui entraîne une collision temporaire pour sort_order et IMMÉDIATEMENT échoue. Notez que cela signifie que pour le même schéma et les mêmes données, la même requête peut fonctionner ou échouer selon le plan d'exécution.

Vous devrez rendre la contrainte DEFERRABLE ou DEFERRABLE INITIALLY DEFERRED , ce qui retarde la vérification de la contrainte jusqu'à la fin de la transaction ou jusqu'au moment où une instruction SET CONSTRAINTS ... IMMEDIATE est exécuté.

Addendum du commentaire de @HansGinzel :