JRuby on Rails utilizzando jdbc postgres (8.4) ignora i valori predefiniti
-
30-10-2019 - |
Domanda
Ho una tabella creata in una migrazione (solo per semplificare il problema) simile a questa:
create_table :test_defaults, :force => true do |table|
table.integer :failure, :default => -1, :null => false
end
Quindi, una colonna denominata fallimento.Quando eseguo questo comando rails:
td = TestDefault.create!
JRuby fallisce con:
ActiveRecord::StatementInvalid: ActiveRecord::JDBCError: ERROR: null value in column
"failure" violates not-null constraint: INSERT INTO "test_defaults" ("failure")
VALUES(NULL) RETURNING "id"
mentre la versione Ruby riesce con una query come questa:
INSERT INTO "test_defaults" ("failure") VALUES(-1) RETURNING "id"
Sto correndo:
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)
I suggerimenti sono apprezzati.Non sono riuscito a trovare nulla di utile su Google e non so nemmeno a chi segnalare il bug.
Saluti.
MODIFICARE: Ah.Sembra che accada solo con valori predefiniti negativi.Zero e maggiore vanno bene.
EDIT2: Dalla mia risposta di seguito, si tratta di un problema di codice attorno alle parentesi sui valori predefiniti negativi in Postgres 8.4.Se qualcuno potesse suggerire un modo per aggirare questo problema senza attendere un aggiornamento del gem (come dire a Postgres di rimuovere quelle parentesi), sarebbe molto apprezzato.
Nessuna soluzione corretta