PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie man ActiveRecord ThreadSafe macht

Im Gegensatz zu den Kommentaren sind gleichzeitige Einfügungen in dieselbe Tabelle in PostgreSQL durchaus zulässig, daher gibt es hier eine Race-Bedingung.

Um dies sicher zu machen, müssen Sie einen unique haben Einschränkung (oder primary key ) auf column_name . Doppelte Einfügungen lösen dann eine Ausnahme aus, die Sie abfangen und mit einem Update erneut versuchen können.

Wenn Sie keine Eindeutigkeitsbeschränkung haben, müssen Sie LOCK TABLE ... IN EXCLUSIVE MODE um gleichzeitige Upserts zu verhindern. Oder verwenden Sie eine der nebenläufigkeitssicheren Methoden, die beschrieben werden in:

Wie wird UPSERT (MERGE, INSERT ... ON DUPLICATE UPDATE) in PostgreSQL durchgeführt?