Използвам релси и mysql2 адаптер. Искам да променя всички първични идентификатори и чужди ключове да бъдат 64-битови цели вместо 32-битовата по подразбиране, тъй като са в момента за моята производствена база данни.
Това е възможно в движение или трябва да изпусна базата данни, да променя структурата и отново да импортирам данните?
Ако има начин да го направите, без да изпуснете базата данни, дори и да е рана, би било чудесно да знаете.
Отговори:
2 за отговор № 1Докато ActiveRecord не поддържа това, можете да го използвате 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
За нови маси трябва да можете просто да го направите
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
Също така започвайки с Rails 5.1 първичните ключове ще бъдат BIGINT
по подразбиране.
4 за отговор № 2
Rails 5.1 вече е добавен a bigint
тип за миграции, можете да направите това:
change_column :users, :id, :bigint
Източник: http://www.mccartie.com/2016/12/05/rails-5.1.html