Pregunta

Tengo una tabla creada en una migración (solo para simplificar el problema) que se ve así:

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

Entonces, una columna nombrada falla. Cuando ejecuto este comando rieles:

td = TestDefault.create!

Jruby falla con:

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

Mientras que la versión de Ruby tiene éxito con una consulta como esta:

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

Estoy corriendo:

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)

Se aprecian las sugerencias. No he podido encontrar algo útil en Google, y ni siquiera sé a quién informar el error.

Salud.

EDITAR: Decir ah. Parece que solo sucede con valores predeterminados negativos. Cero y mayor está bien.

Edit2: De mi respuesta a continuación, es un problema de código alrededor de los soportes en valores predeterminados negativos en Postgres 8.4. Si alguien puede sugerir una forma de evitar este problema sin esperar una actualización de gemas (como decirle a Postgres que elimine esos soportes), sería muy apreciado.

No hay solución correcta

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top