こんにちは!kossyです!
今回はRailsでPostgreSQLを使っていて、bulk_insertを行う際に uuid_generate_v4() が走らない問題の対処法について、
ブログに残してみたいと思います。
環境
Ruby 2.6.6
Rails 6.0.3
PostgreSQL 12系
Securerandomモジュールのuuidメソッドを使う
RailsでActiveRecord-importを用いてbulk_insertを行う場合、直接SQLを実行するため、uuidを自動挿入する uuid_generate_v4()関数が走りません。
この場合、インスタンスの生成時に Securerandomモジュールのuuidメソッドが生成する値をattrに代入すればOKです。
以下は簡単なサンプルコードです。
now = Time.zone.now users = [] rows.each do |row| users << User.new(uuid: Securerandom.uuid, name: row[:name], row[:email], row[:password], created_at: now, updated_at: now) end User.import books
まとめ
bulk_insertを行う時は、カラムのdefault値に特別な関数を当てているケースに注意しましょう。