Ich habe einen Sidekiq Job mit first_or_create.Verwendung von first_or_create in Sidekiq Job
class JobWithFirstOrCreate
analysis = Analysis.where(standard_id: standard_id).first_or_create
analysis.save!
end
Dies führt jedoch dazu, dass die Eindeutigkeitsprüfung fehlschlägt, da doppelte Analysedatensätze erstellt werden. Ich verstehe das, weil first_or_create nicht atomar ist.
Also, was ist der richtige Weg, dies zu tun?
Ich möchte Jobs gleichzeitig ausführen, in denen ich aktualisieren, wenn ein Analyse-Datensatz bereits vorhanden ist, sonst einfügen.
Ich benutze Postgres und die folgende Abfrage scheint gut zu funktionieren. "INSERT in Analyse (standard_id, top_score) Werte (# {standard_id}, # {top_score}) bei Konflikt (standard_id) update set (top_score) = (# {top_score})" –
Ja, das wird gut funktionieren. Mysql kann etwas ähnliches tun. –