/ / Rails променят основния id до 64 bit bigint - mysql, ruby-on-rails, ruby

Релсите сменят основния идентификационен номер на 64 битов bigint - mysql, ruby-on-rail, рубин

Използвам релси и 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