Masz numeric
pole z typmod numeric(8,2)
i próbujesz przechowywać wartość większą niż 999999.99
w tym. Zobacz podręcznik PostgreSQL na temat NUMERIC
aby uzyskać informacje o skali numerycznej i precyzji, które są kwalifikatorami wyświetlanymi po typie w nawiasach.
To wcześniejsze pytanie wydaje się obejmować ten sam problem z Rails, pokazując model Rails oraz sposób przypisywania skali i precyzji.
NUMERIC
nie jest polem daty/czasu, jest polem liczbowym.
Demo problemu:
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.
Szkoda, że Pg nie mówi, jakie to jest pole, gdy jest polem. Jest to jednak trudne, ponieważ zwykle nie wie, która wartość trafi do którego pola, gdy analizuje literały ciągu. Włącz log_statement = 'all'
w postgresql.conf
, ALTER USER ... SET
, ALTER DATABASE ... SET
, lub na sesję z SET log_statement = 'all'
następnie ponownie przetestuj i sprawdź dzienniki zapytań.
Spójrz także na definicje tabel za pomocą \dt
w psql
aby zobaczyć, co może mieć typ numeric(8,2)
i może być przyczyną problemu.
Dlaczego działa lokalnie:czy jest to lokalna baza danych PostgreSQL? Niektórzy użytkownicy Railsów wydają się mieć bardzo dziwną konfigurację, w której używają SQLite lokalnie, a PostgreSQL na Heroku. To recepta na chaos i problemy z wdrożeniem. Korzystaj z tej samej bazy danych podczas tworzenia i testowania. Jeśli jest PostgreSQL lokalnie, czy to ta sama wersja?