その他
    ホーム 技術発信 DoRuby Rails migrationでbigint型のidカラムを作成

    Rails migrationでbigint型のidカラムを作成

    この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

    Railsのmigrationでbigint型のカラムを作成する方法です。

    Rails3.1.3, Postgresql 9.1.0 にて確認。

    Railsではmigrationのadd_columnでprimary_keyオプションを指定すると、自動でシーケンステーブルとオートインクリメントの付いたカラムを作成してくれます。

    class AddColumnIdToUsers < ActiveRecord::Migration
      def up
           add_column :users, :id, :primary_key
      end
    
      def down
        remove_column :users, :id
      end
    
    end
    

    ですが、これでは型がintegerになってしまいます。型を変更するオプションなども無いようです。

    bigintでカラムを作成するため、SQLを直接発行することにします。

    class AddColumnIdToUsers < ActiveRecord::Migration
      def up
        execute <<-SQL
          ALTER TABLE users ADD COLUMN id bigint DEFAULT nextval('users_id_seq') PRIMARY KEY;
        SQL
      end
    
      def down
        remove_column :users, :id
      end
    
    end
    

    Postgresqlでのシーケンステーブルは以下のように作成できます。

    class CreateUsersSeq < ActiveRecord::Migration
      def up
        ActiveRecord::Base.connection.execute("create sequence users_id_seq;")
      end
    
      def down
        ActiveRecord::Base.connection.execute("drop sequence users_id_seq;")    
      end
    end
    記事を共有