У меня есть таблица, созданная в миграции (только для упрощения задачи), которая выглядит следующим образом:JRuby на Rails с использованием JDBC Postgres (8.4) игнорирует значения по умолчанию
create_table :test_defaults, :force => true do |table|
table.integer :failure, :default => -1, :null => false
end
Таким образом, один столбец с именем провала. Когда я исполняю эти рельсы команда:
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"
в то время как версия рубина успешно с запросом, как это:
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)
Предложения a re оценен. Не удалось найти что-нибудь полезное в Google, и даже не знаю, кому сообщить об ошибке.
Cheers.
EDIT: Ha. Кажется, это происходит только с отрицательными значениями по умолчанию. Нуль и больше в порядке.
EDIT2: Из моего ответа ниже, это проблема с кодом вокруг скобок по отрицательным значениям по умолчанию в postgres 8.4. Если кто-то может предложить способ обойти эту проблему, не дожидаясь обновления gem (например, рассказывая postgres об удалении этих скобок), это было бы очень признательно.
Отмечено это как «без ответа», потому что я не очень доволен нынешним решением. – Glenn
Ошибка отмечена как исправленная. – Glenn