ActiveRecord::Persistence::ClassMethods#upsert_allのオプションについて
バッチ処理の高速化に取り組んでいます。
そこで、あるテーブルに対して一括insert、ユニークキーが重複していればupdateという処理を行いたいと考えました。
まずは、Ruby on Rails 6.0から導入された
ActiveRecord::Persistence::ClassMethods#upsert_all
このメソッドで一括処理を実施したのですが、なぜか`Duplicate entry 'x×' for key`が出てしまう。。
ドキュメントをよく見てみると、ユニークキーを指定するオプションのところにしっかりと書かれていました、、
:unique_by
(PostgreSQL and SQLite only)
担当していたシステムはMySQLを使用していたので、当然このオプションは使えません。
なので、activerecord-import
というgemを使用し、一括処理を実施できるようにしました。
ドキュメントはちゃんと読みます。。