PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come rendere ActiveRecord ThreadSafe

Contrariamente ai commenti, gli inserimenti simultanei sulla stessa tabella sono del tutto consentiti in PostgreSQL, quindi qui c'è una race condition.

Per renderlo sicuro devi avere un unique vincolo (o primary key ) su column_name . Gli inserimenti duplicati genereranno quindi un'eccezione che puoi rilevare e riprovare con un aggiornamento.

Se non hai un vincolo univoco, devi LOCK TABLE ... IN EXCLUSIVE MODE per prevenire rialzi simultanei. Oppure usa uno dei metodi sicuri per la concorrenza descritti in:

Come eseguire l'UPSERT (MERGE, INSERT... SU AGGIORNAMENTO DUPLICATO) in PostgreSQL?