2017-01-24 50 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,然後將列轉換回整型。