我需要将postgres中的id数组从整数更改为uuids。它位于Rails应用程序中,还有其他部分,但我无法弄明白。
我可以在ActiveRecord中做到这一点,但我无法弄清楚如何让sql这样做。
add_column :templates, :uuids, :uuid, array: true
Template.find_each do |template|
new_ids = template.conversations.map do |conversation_id|
conversation = Conversation.find_by(id: conversation_id)
conversation.uuid
end
template.update_column(:uuids, new_ids)
end
remove_column :templates, :conversations
rename_column :templates, :uuids, :conversations
我希望这可行,但它告诉我模板上不存在列uuids
。
答案 0 :(得分:1)
运行:
Template.reset_column_information
创建列之后,数据迁移之前应刷新缓存并发现新列。 对于同时执行列操作和数据迁移的任何单个迁移文件,这都是相同的。
另一种方法是将其拆分为2-3次迁移。像这样:
第二种方法的另一个好处是,如果您的数据迁移因任何原因而失败,则您不会处于已创建第一列的伪状态。此状态意味着尝试重新运行迁移将失败,因为该列已存在。