Hai un numeric
campo con typmod numeric(8,2)
e stai cercando di memorizzare un valore maggiore di 999999.99
dentro. Vedi il manuale di PostgreSQL su NUMERIC
per informazioni su scala numerica e precisione, che sono i qualificatori mostrati dopo il tipo tra parentesi.
Questa domanda precedente sembra coprire lo stesso problema con Rails, mostrando il modello Rails e come vengono assegnate la scala e la precisione.
NUMERIC
non è un campo data/ora, è un campo numerico.
Demo del problema:
regress=> SELECT NUMERIC(8,2) '999999.99';
numeric
-----------
999999.99
(1 row)
regress=> SELECT NUMERIC(8,2) '1000000.00';
ERROR: numeric field overflow
DETAIL: A field with precision 8, scale 2 must round to an absolute value less than 10^6.
Peccato che Pg non ti dica che campo è questo quando è un campo. È difficile che lo faccia, però, perché di solito non sa quale valore andrà in quale campo quando analizza le stringhe letterali. Abilita log_statement = 'all'
in postgresql.conf
, ALTER USER ... SET
, ALTER DATABASE ... SET
o per sessione con SET log_statement = 'all'
quindi testa nuovamente ed esamina i log delle query.
Guarda anche le definizioni delle tabelle con \dt
in psql
per vedere cosa potrebbe avere il tipo numeric(8,2)
e potrebbe essere la causa del problema.
Per quanto riguarda il motivo per cui funziona localmente:il DB locale è PostgreSQL? Alcuni utenti di Rails sembrano avere una configurazione molto strana in cui usano SQLite localmente e PostgreSQL su Heroku. Questa è una ricetta per il caos e i problemi di distribuzione. Utilizzare lo stesso database in fase di sviluppo e test. Se lo è PostgreSQL in locale, è la stessa versione?