2017-01-24 49 views
0

我以前将我的表的id列中的一个转换为bigint,并用bigint值填充它。我现在很后悔,因为我似乎无法通过ActiveRecord without runnning into RangeErrors更新值。在Rails中重新创建主键

我想将id列转换回标准整数类型,并清除现有值并使用自动递增的整数值填充它。

我没有任何外键/关系我需要担心。

是否有直接的方式通过Rails迁移(Rails 4/Postgres)来完成此操作?

现有迁移:

class ConvertWidgetPkToBigint < ActiveRecord::Migration 
    def change 
    change_column :widgets, :id, :bigint 
    end 
end 

电流schema.rb:

create_table "widgets", id: :bigserial, force: :cascade do |t| 
... 
end 
+0

我不认为有一个简单的方法(这不是一个常见的事情)。你可以删除该列,然后再次添加它? –

回答

-2

想通了:

class RecreatePrimaryKey < ActiveRecord::Migration 
    def change 
    execute "UPDATE widgets SET id = DEFAULT" 
    change_column :widgets, :id, :integer 
    end 
end 

基本上它重新填充与柱自动增加价值es,然后将列转换回整型。