次のような(問題を単純化するためだけに)移行で作成されたテーブルがあります。
create_table :test_defaults, :force => true do |table|
table.integer :failure, :default => -1, :null => false
end
したがって、failureという名前の1つの列。このrailsコマンドを実行すると:
td = TestDefault.create!
JRubyは次のように失敗します:
ActiveRecord::StatementInvalid: ActiveRecord::JDBCError: ERROR: null value in column
"failure" violates not-null constraint: INSERT INTO "test_defaults" ("failure")
VALUES(NULL) RETURNING "id"
一方、rubyバージョンは次のようなクエリで成功します。
INSERT INTO "test_defaults" ("failure") VALUES(-1) RETURNING "id"
私が実行している:
ruby 1.8.7,
rails 2.2.2,
jruby 1.5.6,
activerecord-jdbc-adapter (1.1.0)
activerecord-jdbcpostgresql-adapter (1.1.0)
jdbc-postgres (8.4.702)
提案をいただければ幸いです。グーグルで役立つものを見つけることができず、バグを誰に報告すればよいのかさえわかりません。
乾杯。
編集:ハ。負のデフォルトでのみ発生するようです。ゼロ以上で問題ありません。
EDIT2:以下の私の答えから、postgres8.4の負のデフォルト値の括弧の周りのコードの問題です。誰かがgemのアップグレードを待たずにこの問題を回避する方法を提案できる場合(postgresにこれらのブラケットを削除するように指示するなど)、それは大いにありがたいです。