質問

このように見える移行(問題を簡素化するためだけに)で作成されたテーブルがあります。

create_table :test_defaults, :force => true do |table|
     table.integer   :failure,       :default => -1, :null => false
end

したがって、故障という名前の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)

提案をいただければ幸いです。 Googleで役立つものを見つけることができず、バグを誰に報告するかさえ知りません。

乾杯。

編集: ハ。負のデフォルトでのみ発生するようです。ゼロ以上は大丈夫です。

編集2: 以下の私の答えから、それはポストグレス8.4の負のデフォルト値に関するブラケットに関するコードの問題です。誰かが宝石のアップグレードを待たずにこの問題を回避する方法を提案できれば(それらのブラケットを削除するようにPostgresに伝えるなど)、大いに感謝します。

正しい解決策はありません

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top