Заполнение столбца uuid в postgres, rails

#ruby-on-rails #postgresql

#ruby-on-rails #postgresql

Вопрос:

Я добавил новый столбец uuid в существующую таблицу. Как рекомендует strong migrations gem, я хочу заполнить значение столбца отдельно.

Я написал после миграции, чтобы добавить столбец uuid, который работает нормально:

   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
 

Я получил следующую миграцию для заполнения данных, но она не работает, как ожидалось:

   def up
    Model.unscoped.in_batches do |relation|
      relation.update_all column_name: 'gen_random_uuid()'
      sleep(0.01) # throttle
    end
  end
 

Комментарии:

1. Что вы подразумеваете под «не работает»? Вы видите ошибку?

2. Нет, инструкция sql, выданная rails, устанавливает значение столбца равным null. Но я хочу добавить случайный uuid для назначения.

Ответ №1:

Использование необработанного sql-запроса решает проблему:

   def up
    Model.unscoped.in_batches do |relation|
      relation.update_all "column_name = gen_random_uuid()"
      sleep(0.01) # throttle
    end
  end