我正在使用rails和mysql2适配器。我想将所有主要ID和外键更改为64位整数,而不是默认的32位,因为它们现在是我的生产数据库。
这是可行的还是我必须删除数据库,更改结构并再次导入数据?
如果有办法在不删除数据库的情况下执行此操作,即使它是一个黑客,也很高兴知道。
答案 0 :(得分:6)
Rails 5.1已经为迁移添加了bigint
类型,您可以这样做:
change_column :users, :id, :bigint
答案 1 :(得分:4)
虽然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
。