jdbc postgresを使用したレール上のjruby(8.4)はデフォルト値を無視します
-
30-10-2019 - |
質問
このように見える移行(問題を簡素化するためだけに)で作成されたテーブルがあります。
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に伝えるなど)、大いに感謝します。
正しい解決策はありません
所属していません StackOverflow