Saya telah menambahkan kolom uuid baru di tabel yang ada. Seperti yang direkomendasikan oleh permata migrasi kuat, saya ingin mengisi ulang nilai kolom secara terpisah.

Saya telah menulis migrasi berikut untuk menambahkan kolom uuid, yang berfungsi dengan baik:

  def change
    enable_extension 'pgcrypto' unless extension_enabled?('pgcrypto')
    add_column :table_name, :column_name, :uuid
    change_column_default :table_name, :column_name, 'gen_random_uuid()'
  end

Saya mendapatkan migrasi berikut untuk mengisi ulang data, tetapi tidak berfungsi, seperti yang diharapkan:

  def up
    Model.unscoped.in_batches do |relation|
      relation.update_all column_name: 'gen_random_uuid()'
      sleep(0.01) # throttle
    end
  end
-1
abhishek77in 20 November 2020, 18:18

1 menjawab

Jawaban Terbaik

Menggunakan kueri sql mentah memecahkan masalah:

  def up
    Model.unscoped.in_batches do |relation|
      relation.update_all "column_name = gen_random_uuid()"
      sleep(0.01) # throttle
    end
  end
0
abhishek77in 20 November 2020, 15:42