Je hebt een numeric
veld met typmod numeric(8,2)
en u probeert een waarde op te slaan die groter is dan 999999.99
in het. Zie de PostgreSQL-handleiding op NUMERIC
voor informatie over numerieke schaal en precisie, de kwalificaties die worden weergegeven na het type tussen haakjes.
Deze eerdere vraag lijkt hetzelfde probleem met Rails te dekken, met het Rails-model en hoe de schaal en precisie worden toegewezen.
NUMERIC
is geen datum/tijd-veld, het is een numeriek veld.
Demo van het probleem:
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.
Het is jammer dat Pg je niet vertelt welk veld dit is als het een veld is. Het is echter moeilijk om dit te doen, omdat het meestal niet weet welke waarde in welk veld zal gaan wanneer het tekenreeksliteralen ontleedt. Schakel log_statement = 'all'
in in postgresql.conf
, ALTER USER ... SET
, ALTER DATABASE ... SET
, of per sessie met SET log_statement = 'all'
test en onderzoek vervolgens de querylogboeken opnieuw.
Bekijk ook de tabeldefinities met \dt
in psql
om te zien wat het type numeric(8,2)
. kan hebben en kan het probleem veroorzaken.
Wat betreft waarom het lokaal werkt:is de lokale DB PostgreSQL? Sommige Rails-gebruikers lijken een heel vreemde opstelling te hebben waarbij ze SQLite lokaal en PostgreSQL op Heroku gebruiken. Dit is een recept voor chaos en implementatieproblemen. Gebruik dezelfde database bij het ontwikkelen en testen. Als het is PostgreSQL lokaal, is het dezelfde versie?