2017-01-24 10 views
0

私は以前に自分のテーブルのidカラムの1つを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 

を基本的にそれが持つ列を再移入自動増分値次に、列を整数型に変換します。

関連する問題