#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