LoginSignup
0
0

More than 5 years have passed since last update.

auto increment な主キーを uuid に変更する

Posted at

rails デフォだと 数値の主キーになるので、それを uuid を利用するように変更する。
変更は簡単なんだけど、 リバーシブルに作るのが辛かったのでメモ。
DBスキーマはリバーシブルだが、IDの順序はリバーシブルじゃないので注意。

class ChangeIdToUuid < ActiveRecord::Migration[5.0]
  def change
    change_id_to_uuid(:messages)
  end

  def change_id_to_uuid(table_name)
    reversible do |dir|
      dir.up do
        change_column_default table_name, :id, nil
        change_column table_name, :id, :uuid, null: false, default: 'uuid_generate_v4()', using: 'uuid_generate_v4()'
        execute "DROP SEQUENCE IF EXISTS #{table_name}_id_seq;"
      end
      dir.down do
        change_column_default table_name, :id, nil
        execute "CREATE SEQUENCE #{table_name}_id_seq;"
        change_column table_name, :id, :integer, null: false,
          using: "nextval('#{table_name}_id_seq'::regclass)"
        execute "ALTER TABLE #{table_name} ALTER COLUMN id SET DEFAULT nextval('#{table_name}_id_seq'::regclass);"
      end
    end
  end
end
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0