初期の問題
Railsアプリケーションでは、主キーとして多数のデータを使用して、レガシーデータベースのデータを処理する必要があります。MySQLとPostgreSQLの両方の4バイトINTまたはINTEGERデータ型の制限を超える数。しかし、それはまさにRailsのアダプターが" integer
"を変換するデータ型です。
私の回避策
SQLiteには大きな数値を受け入れる整数型が1つしかないため、これは開発では問題になりませんでした。しかし、ステージング/本番環境(つまり、 SQLite以外で使用するため)では、ファイルを手動で編集してschema.rb
。に置き換えるt.integer "id"
必要がありましたt.column "id", 'BIGINT'
。次に、スキーマをロードし、データをインポートすると、機能します。
回避策の問題
これで、Rails移行を実行してデータベーススキーマに小さな変更を加えるたびに、schema.rb
ファイル全体が自動的に再生成され、すべてのid
列がt.integer
再び生成されます。以前のように、これは開発(SQLite)では問題ではありませんが、おそらく本番環境では問題になりますね。列を追加または名前変更する必要があるたびに、データベースを削除し、スキーマをロードして、すべてのデータを再インポートする必要はありません。これには、移行を使用したいと思います。
これまでの回避策は、移行前にのバックアップコピーを作成schema.rb
し、移行によって行われた追加を自分の追加とマージすることでした。誰かもっと良いアイデアがありますか?