Rails将主ID更改为64位bigint

时间:2017-01-25 15:25:42

标签: mysql ruby-on-rails ruby

我正在使用rails和mysql2适配器。我想将所有主要ID和外键更改为64位整数,而不是默认的32位,因为它们现在是我的生产数据库。

这是可行的还是我必须删除数据库,更改结构并再次导入数据?

如果有办法在不删除数据库的情况下执行此操作,即使它是一个黑客,也很高兴知道。

2 个答案:

答案 0 :(得分:6)

Rails 5.1已经为迁移添加了bigint类型,您可以这样做:

change_column :users, :id, :bigint

来源: http://www.mccartie.com/2016/12/05/rails-5.1.html

答案 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