sql >> Database teknologi >  >> RDS >> PostgreSQL

PG::Fejl - numerisk feltoverløb på Heroku

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?




  1. Normaliser alle UTF8-tegn til det mest standardformat

  2. Datoen fra excel ændres, når den uploades til mysql

  3. Reg. transaktionsstøtte til et forårsbatchjob på jobniveau

  4. VBScript hænger, når batchfilen startes med WShell.Script Run