我在postgresql数据库中有一个遗留列,它是一个序列化哈希,我想将它转换为json数据类型。我很确定我不能只进行迁移并将其转换为json。请告诉我创建新列的最简单方法,将数据从一列复制到另一列,删除旧列并重命名新列。
答案 0 :(得分:1)
虽然json列的行为与序列化列非常相似,但请记住,在某些情况下,json列不能用于替代(例如,使用ActiveAdmin等扩展)。因此,我建议保留原始列,并以不同的名称非破坏性地将数据复制到新的JSON列。确保您可以安全地迁移数据,同时还能够还原潜在问题。
这个过程看起来像这样:
find_each
)和 copy 数据从现有序列化列迭代到每个记录的新创建的JSON列。 提交git 我强调“提交git”步骤,特别是在步骤3中,因为它允许您轻松隔离/平分/恢复任何潜在错误。此外,如果这是一个真正的重构,您的应用程序的外部行为不应该只是因为您使用JSON列与序列化列而更改,因此您可以恢复步骤3&重新运行测试以更好地验证并隔离错误/更改。如果出现问题,您将能够回到原来的位置,因为第2步是非破坏性的。
为了消除停机时间,您显然希望在步骤3中部署代码更改之前运行迁移并通过rake任务复制数据。
最后,一旦您对数据的完整性充满信心,就可以删除原始序列化列,从而允许您将JSON列重命名为列的原始名称。