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?