PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

PG::Error - estouro de campo numérico no Heroku


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?