Contrairement aux commentaires, les insertions simultanées sur la même table sont entièrement autorisées dans PostgreSQL, il y a donc une condition de concurrence ici.
Pour rendre cela sûr, vous devez avoir un unique
contrainte (ou primary key
) sur column_name
. Les insertions en double lèveront alors une exception que vous pourrez intercepter et réessayer avec une mise à jour.
Si vous n'avez pas de contrainte unique, alors vous devez LOCK TABLE ... IN EXCLUSIVE MODE
pour éviter les bouleversements simultanés. Ou utilisez l'une des méthodes sécurisées pour la concurrence décrites dans :
Comment UPSERT (MERGE, INSERT ... ON DUPLICATE UPDATE) dans PostgreSQL ?