Techioz Blog

Rails Postgres 本番データベースを整理する

概要

あるテーブル(contract)から別のテーブル(weekly_record)に列(スコアと呼ばれる)を移動しました。 Weekly_record の新しい移行を作成しました。ただし、私はそれを元のテーブルから「手動で」削除しました。具体的には、元の移行の列を削除しました。

csv ファイルを介してデータを新しいローカル データベースにシードし直し、「スコア」が新しいテーブルに保存されていることを確認し、古い列はすべての履歴を削除したため存在しないため、開発中はすべて問題ありません。

しかし、運用環境では、古いレコードはすべてそのまま残っており、DB を削除して再シードしたくありません (そうする必要がある場合を除く)。それに対処する最善の方法がわかりません。

次のオプションが表示されます。

実稼働データベースを操作するのはまだ少し怖いです。私はローカルのものを常に消去して再構築することに慣れています

ありがとう

解決策

Rails 移行システムは、順次動作するように設計されています。ローカルで以前の移行に戻って変更した場合、Rails は移行を実行する順序を認識または認識できません。

本番環境と一致するように移行を元に戻すことが最善です。シード ファイルがあるため、開発 DB を削除し、本番環境に合わせて移行を再実行できます。

その後、以下を実行する新しい移行を生成します。

リポジトリ内に移行ファイルの長いリストが残るのが嫌な場合は、すべての環境が同期した後でいつでも削除できます。ただし、過去の移行を遡って編集すると、現在直面しているような問題が発生することがよくあります。