Question

J'ai un tableau créé dans une migration (seulement pour simplifier le problème) qui ressemble à ceci:

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

Ainsi, une colonne nommée défaillance. Lorsque j'exécute cette commande Rails:

td = TestDefault.create!

JRuby échoue avec:

ActiveRecord::StatementInvalid: ActiveRecord::JDBCError: ERROR: null value in column
"failure" violates not-null constraint: INSERT INTO "test_defaults" ("failure")
VALUES(NULL) RETURNING "id"

Alors que la version Ruby réussit avec une requête comme celle-ci:

INSERT INTO "test_defaults" ("failure") VALUES(-1) RETURNING "id"

Je suis entrain de courir:

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)

Les suggestions sont appréciées. Je n'ai rien pu trouver utile sur Google et je ne sais même pas à qui signaler le bogue.

Acclamations.

ÉDITER: Ha. Il semble que cela ne se produise qu'avec des valeurs par défaut négatives. Zéro et plus c'est bien.

Edit2: D'après ma réponse ci-dessous, il s'agit d'un problème de code autour des supports sur les valeurs par défaut négatives dans Postgres 8.4. Si quelqu'un peut suggérer un moyen de contourner ce problème sans attendre une mise à niveau de gemme (comme dire à Postgres de supprimer ces supports), ce serait très apprécié.

Pas de solution correcte

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top