この記事はアピリッツの技術ブログ「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