sql >> Base de Datos >  >> RDS >> PostgreSQL

PG::Error:desbordamiento de campo numérico en Heroku

Tienes un numeric campo con typmod numeric(8,2) y está intentando almacenar un valor mayor que 999999.99 en eso. Consulte el manual de PostgreSQL en NUMERIC para obtener información sobre escala numérica y precisión, que son los calificadores que se muestran después del tipo entre paréntesis.

Esta pregunta anterior parece cubrir el mismo problema con Rails, mostrando el modelo de Rails y cómo se asignan la escala y la precisión.

NUMERIC no es un campo de fecha/hora, es un campo numérico.

Demostración 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.

Es una pena que Pg no te diga qué campo es este cuando es un campo. Sin embargo, es difícil hacerlo porque normalmente no sabe qué valor irá en qué campo cuando está analizando literales de cadena. Habilitar log_statement = 'all' en postgresql.conf , ALTER USER ... SET , ALTER DATABASE ... SET , o por sesión con SET log_statement = 'all' luego vuelva a probar y examine los registros de consultas.

También mire las definiciones de la tabla con \dt en psql para ver lo que podría tener el tipo numeric(8,2) y podría estar causando el problema.

En cuanto a por qué funciona localmente:¿Es el DB PostgreSQL local? Algunos usuarios de Rails parecen tener una configuración muy extraña en la que usan SQLite localmente y PostgreSQL en Heroku. Esta es una receta para el caos y los problemas de implementación. Utilice la misma base de datos en desarrollo y pruebas. Si es PostgreSQL localmente, ¿es la misma versión?