У меня есть таблица, созданная в процессе миграции (только для упрощения проблемы), которая выглядит следующим образом:
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)
Предложения приветствуются. Не удалось найти ничего полезного в Google, и даже не знаю, кому сообщить об ошибке.
Приветствие.
РЕДАКТИРОВАТЬ: Ха. Кажется, это происходит только с отрицательными значениями по умолчанию. Ноль и больше в порядке.
EDIT2: Из моего ответа ниже, это проблема кода в квадратных скобках для отрицательных значений по умолчанию в postgres 8.4. Если кто-то может предложить способ обойти эту проблему, не дожидаясь обновления гема (например, сказать postgres, чтобы убрать эти скобки), это было бы очень полезно.