PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

PG::Errore - overflow del campo numerico su Heroku

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?