:transaction_code
属性を持つTransaction
というモデルがあります。 id
と異なる可能性のあるシーケンス番号(たとえば、id=1
の取引にはtransaction_code=1000
が含まれている可能性があります)でその属性を自動的に埋めたいとします。Ruby on Rails + PostgreSQL:カスタムシーケンスの使用
私はpostgresでシーケンスを作成してからtransaction_code
カラムのデフォルト値をそのシーケンスのnextval
にしようとしました。これは何
INSERT INTO transactions (transaction_code) VALUES (NULL);
は、新しい行を作成することです: 私はRoRの上@transaction.save
を発行するとき、私は、RoRの上@transaction.transaction_code
に任意の値を割り当てない場合の事は、あり、それは以下のSQLを実行するためにしようシーケンスのnextvalを計算して対応する列に挿入するのではなく、transaction_codeをNULLとしてTransactionsテーブルに追加します。したがって、私が知ったように、あなたがpostgresにNULLを指定すると、デフォルト値を持っているかどうかに関わらず、実際にNULLをその列に挿入することを前提としています(私はORACLEの動作が異なります)。
私はこの上の任意の解決策に開いている、のいずれかがデータベース上またはRoRの上で行われている場合:
- のいずれかのActiveRecordの
save
- から属性を除外するための方法があるか、そこにありますトリガー
- またはRoRの
- または他の方法の中にこれらのシーケンス番号を生成する方法がある限り、それは :-)作品として、そこにあると、挿入する前に、列の値を変更する方法
ありがとうございます。
あなたの答えはありがとうございました。事は、ActiveRecordのsaveメソッドの中で、DEFAULTキーワードをINSERT内に "送る"ことはできません(そうすれば、そうすることができます)。 Ruby on Railsアプリケーションで100%コード化できるソリューションをデータベースでプログラミングするのではなく、必要に応じて他のDBMSにシームレスに移行できないようにするソリューションを好むだろう。 –
@Ricardo:「別のDBMSにシームレスに移行する」というのは素晴らしいファンタジーですが、現実とはあまり関係がありません。引き金の1つの大きな欠点は、あなたがHeroku共有データベースでそれを使用できないことです。 –