Имате numeric
поле с typmod numeric(8,2)
и се опитвате да съхраните стойност, по-голяма от 999999.99
в него. Вижте ръководството на PostgreSQL за NUMERIC
за информация относно цифровия мащаб и прецизност, които са квалификаторите, показани след типа в скоби.
Този по-ранен въпрос изглежда покрива същия проблем с Rails, показвайки модела на Rails и как се задават мащабът и точността.
NUMERIC
не е поле за дата/час, а числово поле.
Демонстрация на проблема:
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.
Жалко, че Pg не ви казва какво е това поле, когато е поле. За него обаче е трудно да го направи, защото обикновено не знае коя стойност ще влезе в кое поле, когато анализира литералите на низа. Активирайте log_statement = 'all'
в postgresql.conf
, ALTER USER ... SET
, ALTER DATABASE ... SET
, или на сесия с SET log_statement = 'all'
след това тествайте отново и прегледайте регистрационните файлове на заявките.
Вижте също дефинициите на таблиците с \dt
в psql
за да видите какво може да има тип numeric(8,2)
и може да е причина за проблема.
Що се отнася до това защо работи локално:локалната база данни PostgreSQL ли е? Някои потребители на Rails изглежда имат много странна настройка, където използват SQLite локално и PostgreSQL на Heroku. Това е рецепта за хаос и проблеми с внедряването. Използвайте една и съща база данни при разработка и тестване. Ако е PostgreSQL локално, същата версия ли е?