Rails:什么是将序列化哈希列转换为json列的最简单方法

时间:2016-03-28 21:38:23

标签: ruby-on-rails postgresql activerecord

我在postgresql数据库中有一个遗留列,它是一个序列化哈希,我想将它转换为json数据类型。我很确定我不能只进行迁移并将其转换为json。请告诉我创建新列的最简单方法,将数据从一列复制到另一列,删除旧列并重命名新列。

1 个答案:

答案 0 :(得分:1)

虽然json列的行为与序列化列非常相似,但请记住,在某些情况下,json列不能用于替代(例如,使用ActiveAdmin等扩展)。因此,我建议保留原始列,并以不同的名称非破坏性地将数据复制到新的JSON列。确保您可以安全地迁移数据,同时还能够还原潜在问题。

这个过程看起来像这样:

  1. 创建迁移以添加新的JSON列。 提交git
  2. 编写一个rake任务,将每个记录(可能使用find_each)和 copy 数据从现有序列化列迭代到每个记录的新创建的JSON列。 提交git
  3. 将代码中的引用替换为原始序列化列,并引用新列。 提交git
  4. 广泛运行测试,最好是在具有现有数据的登台服务器上
  5. 备份数据库并在生产中运行Rake任务
  6. 我强调“提交git”步骤,特别是在步骤3中,因为它允许您轻松隔离/平分/恢复任何潜在错误。此外,如果这是一个真正的重构,您的应用程序的外部行为不应该只是因为您使用JSON列与序列化列而更改,因此您可以恢复步骤3&重新运行测试以更好地验证并隔离错误/更改。如果出现问题,您将能够回到原来的位置,因为第2步是非破坏性的。

    为了消除停机时间,您显然希望在步骤3中部署代码更改之前运行迁移并通过rake任务复制数据。

    最后,一旦您对数据的完整性充满信心,就可以删除原始序列化列,从而允许您将JSON列重命名为列的原始名称。