yikegaya’s blog

仕事関連(Webエンジニア)と資産運用について書いてます

Rails+Postgresql環境でauto incrementなカラムを作る

RailsPostgresql環境で主キーではないauto increment(Postgresqlではsequenceというらしい)な属性をもつカラムを作る必要があってやり方迷った。で、結局こうした。

Migration内でで使えそうなRailsAPIが見つからなかったので(こんなことそんなにやる場面なさそうだし)executeで直接実行してしまった。

sequenceをcreate→テーブルをcreate→sequenceをテーブルに付与という処理が必要っぽい。

今年度入ってからしばらくPostgresqlだけどその前はMySQL、その前はOracleだったんでなんか毎回軽く戸惑うな。

class Add{カラム名}To{テーブル名} < ActiveRecord::Migration
  def up
    add_column :{テーブル名}, :{カラム名}, :integer, comment: "hogehoge"
    execute <<-ENDE
      create sequence {テーブル名}_{カラム名}_seq;
      alter table {テーブル名} alter {カラム名} set default nextval('{テーブル名}_{カラム名}_seq');
      alter sequence {テーブル名}_{カラム名}_seq owned by {テーブル名}.{カラム名};
    ENDE
  end

  def down
    remove_column :{テーブル名}, :{カラム名}, :integer, comment: "hogehoge"
  end
end