Ruby on Rails で SEQUENCE を使うには
PostgreSQLの SEQUENCE を使う必要が出てきたので、調べてみましたが ActiveRecordには直接 SEQUENCE を使うAPI等はありませんでしたが比較的簡単に使えました。
Migration
Migration機能には create_sequence のようなAPI はありませんが以下のようにexecuteを使ってRDB独自のSQLを実行できます。
class XxxxxSequence < ActiveRecord::Migration def self.up execute "CREATE SEQUENCE xxxxx_seq" end def self.down execute "DROP SEQUENCE xxxxx_seq" end end
ただし、テスト用DBを作る rake db:test:prepare では SEQUENCEは作られませんでした
SEQUENCE の利用
これは、ActiveRecord::ConnectionAdapters::DatabaseStatements を使うと任意のSQL文が実行できるので、これで解決です
seq = connection.select_value("select nextval('xxxxx_seq')")
ちなみに select_value の戻り値は 文字列まはた nil のようです。