У меня есть работа Sidekiq с first_or_create.Использование first_or_create в Sidekiq Работа
class JobWithFirstOrCreate
analysis = Analysis.where(standard_id: standard_id).first_or_create
analysis.save!
end
Но это приводит к тому, что валидация уникальности не выполняется из-за создания дублирующих аналитических записей. Я понимаю, это потому, что first_or_create не является атомарным.
Итак, каков правильный способ сделать это?
Я хочу запускать задания одновременно, в которых я обновляю, если запись анализа уже присутствует, иначе вставьте.
Я использую Postgres, и следующий запрос работает нормально. «INSERT в значениях анализа (standard_id, top_score) (# {standard_id}, # {top_score}) в конфликте (standard_id) делает набор обновлений (top_score) = (# {top_score})" –
Да, это сработает. Mysql может сделать что-то подобное. –