私はrailsとmysql2アダプタを使用しています。私はすべてのプライマリIDと外部キーを、現在の本番データベースのように、デフォルトの32ビットではなく64ビットの整数に変更したいと考えています。レールはプライマリIDを64ビットに変更します。
これは即座に可能ですか、データベースを削除し、構造を変更してデータを再度インポートする必要がありますか?
データベースを削除せずに実行する方法がある場合、ハックであってもそれを知ることは素晴らしいことです。あなたは、単にまたRailsのと5.1の主キーを開始
def change
create_table :users, id: false do |t|
t.int :id, limit: 8, primary_key: true
t.string :first_name
t.string :last_name
end
end
を行うことができる必要があり、新たなテーブルの場合execute
class UpdateUserIdLimit < ActiveRecord::Migration
def up
# PostgreSQL
execute('ALTER TABLE users ALTER COLUMN id SET DATA TYPE BIGINT')
# MySQL
execute('ALTER TABLE users MODIFY COLUMN id BIGINT(8) NOT NULL AUTO_INCREMENT')
end
def down
raise ActiveRecord::IrreversibleMigration
end
end
を使用して
任意の変更は、変換時にダウンタイムが発生します。 64ビット整数を必要とする表(おそらく数億ものレコードがある)の場合、その変換には非常に長い時間がかかります。これが稼働時間にどの程度影響するかを確認するためには、テストを実行する必要があります。 – tadman
@tadmanありがとうございました。変換処理中にフォールバックデータベースを用意し、すべての新しいデータを元のデータベースに戻す前に同期化します。 – Ybrin