我在迁移中创建了一个表(仅用于简化问题),如下所示:
create_table :test_defaults, :force => true do |table|
table.integer :failure, :default => -1, :null => false
end
因此,一列名为失败。当我执行这个 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:从我下面的回答来看,这是postgres 8.4中负默认值括号周围的代码问题。如果有人可以在不等待 gem 升级的情况下提出解决此问题的方法(例如告诉 postgres 删除这些括号),将不胜感激。