Oui, et ce comportement est par défaut. Toute violation de contrainte unique constitue un conflit puis la UPDATE
est exécuté si ON CONFLICT DO UPDATE
est spécifié. Le INSERT
l'instruction ne peut avoir qu'un seul ON CONFLICT
clause, mais la conflict_target
de cette clause peut spécifier plusieurs noms de colonne dont chacun doit avoir un index, tel qu'un UNIQUE
contrainte. Vous êtes cependant limité à une seule conflict_action
et vous n'aurez pas d'informations sur la contrainte qui a causé le conflit lors du traitement de cette action. Si vous avez besoin de ce type d'informations, ou d'une action spécifique en fonction de la violation de la contrainte, vous devez écrire une fonction de déclenchement, mais vous perdez alors l'atomicité si importante du INSERT ... ON CONFLICT DO ...
déclaration.