Du har en numeric
felt med typmod numeric(8,2)
og du forsøger at gemme en værdi større end 999999.99
i det. Se PostgreSQL-manualen på NUMERIC
for information om numerisk skala og præcision, som er de kvalifikationer, der vises efter typen i parentes.
Dette tidligere spørgsmål ser ud til at dække det samme problem med Rails, og viser Rails-modellen, og hvordan skalaen og præcisionen er tildelt.
NUMERIC
er ikke et dato/klokkeslætsfelt, det er et talfelt.
Demo af problemet:
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.
Det er ærgerligt, at Pg ikke fortæller dig, hvilket felt dette er, når det er et felt. Det er dog svært for den at gøre det, fordi den normalt ikke ved, hvilken værdi der kommer ind i hvilket felt, når den parser strenge bogstaver. Aktiver log_statement = 'all'
i postgresql.conf
, ALTER USER ... SET
, ALTER DATABASE ... SET
, eller per-session med SET log_statement = 'all'
test derefter og undersøg forespørgselsloggene.
Se også tabeldefinitionerne med \dt
i psql
for at se, hvad der kan have typen numeric(8,2)
og kan være årsag til problemet.
Hvad angår hvorfor det virker lokalt:Er den lokale DB PostgreSQL? Nogle Rails-brugere ser ud til at have et meget mærkeligt setup, hvor de bruger SQLite lokalt og PostgreSQL på Heroku. Dette er en opskrift på kaos og implementeringsproblemer. Brug den samme database i udvikling og test. Hvis det er PostgreSQL lokalt, er det den samme version?