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

Comment rendre ActiveRecord ThreadSafe

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 ?