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

Comment upsert dans Postgres sur conflit sur l'une des 2 colonnes ?

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.