Você tem um
numeric
campo com typmod numeric(8,2)
e você está tentando armazenar um valor maior que 999999.99
iniciar. Consulte manual do PostgreSQL sobre NUMERIC
para obter informações sobre escala numérica e precisão, que são os qualificadores mostrados após o tipo entre parênteses. Esta pergunta anterior parece cobrir o mesmo problema com Rails, mostrando o modelo Rails e como a escala e a precisão são atribuídas.
NUMERIC
não é um campo de data/hora, é um campo numérico. Demonstração do 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.
É uma pena que Pg não lhe diga que campo é este quando é um campo. É difícil fazer isso, porém, porque geralmente não sabe qual valor vai para qual campo quando está analisando literais de string. Ative
log_statement = 'all'
em postgresql.conf
, ALTER USER ... SET
, ALTER DATABASE ... SET
, ou por sessão com SET log_statement = 'all'
em seguida, teste novamente e examine os logs de consulta. Veja também as definições da tabela com
\dt
em psql
para ver o que pode ter o tipo numeric(8,2)
e pode estar causando o problema. Por que funciona localmente:O banco de dados local é PostgreSQL? Alguns usuários do Rails parecem ter uma configuração muito estranha onde eles usam o SQLite localmente e o PostgreSQL no Heroku. Esta é uma receita para problemas de caos e implantação. Use o mesmo banco de dados no desenvolvimento e teste. Se é PostgreSQL localmente, é a mesma versão?