2016-03-28 3 views
0

シリアル化されたハッシュがあるpostgresql dbにレガシーカラムがあり、これをjsonデータタイプに変換します。私は、単にマイグレーションをしてjsonに変換することはできないと確信しています。新しい列を作成し、ある列から別の列にデータをコピーし、古い列を削除して新しい列の名前を変更する最も簡単な方法を教えてください。Rails:シリアル化されたハッシュカラムをjsonカラムに変換する方法は?

答えて

1

json列はシリアル化された列のように機能しますが、json列をドロップイン置換(たとえば、ActiveAdminなどの一部の拡張機能)に使用できない場合があることに注意してください。したがって、元の列を維持し、新しい名前で新しいJSON列にデータを非破壊的にコピーすることをお勧めします。潜在的な問題を元に戻しながらデータを安全に移行できるようにします。

  1. 新しいJSON列を追加するには、移行を作成します。

    プロセスは次のようになります。

  2. は、各レコード用に新しく作成したJSON列にすくい(おそらくfind_eachを使用して)各レコードを反復処理するタスクとコピー、既存のシリアル化された列からデータを書き込みはgitにコミットします。 gitへのコミット
  3. コードの参照を元のシリアル化された列に置き換え、新しい列への参照を置き換えます。 好ましくは既存のデータがあるステージングサーバー上で、広範囲に
  4. ランテストをgitのためにコミット生産

  • バックアップデータベースと実行rakeタスクは、私は特にステップで、ステップを「gitのためにコミット」ハイライト3を使用すると、潜在的なエラーを簡単に分離/二等分/元に戻すことができます。また、これが真のリファクタリングである場合、JSON列とシリアル化された列を使用しているため、アプリケーションの外部動作が変更されることはありませんので、ステップ3 &再テストを元に戻してエラーを確認してください。何かがうまくいかない場合、ステップ2は非破壊的なので、どこにいたかに戻ることができます。

    あなたの整合性の確信していたら、ダウンタイムを排除するために、あなたは、あなたが最後に、ステップ3

    でコードの変更を展開する前に、マイグレーションを実行して、rakeタスクを介してデータをコピーすることは明らかにしたいでしょうデータを使用すると、元のシリアル化された列を削除して、JSON列の名前を列の元の名前に変更できます。

  • +0

    あなたの明確かつ考えられた答えをありがとうございます – stevo999999

    +0

    問題なし、最高の幸運! –

    +0

    それはあなたのために働く場合、あなたは答えを受け入れるのですか? –

    関連する問題