Máte numeric
pole s typmod numeric(8,2)
a pokoušíte se uložit hodnotu větší než 999999.99
v něm. Viz příručku PostgreSQL na NUMERIC
informace o číselném měřítku a přesnosti, což jsou kvalifikátory zobrazené za typem v závorkách.
Tato dřívější otázka Zdá se, že pokrývá stejný problém s Rails, ukazuje model Rails a jak je přiřazeno měřítko a přesnost.
NUMERIC
není pole data/času, je to číselné pole.
Demo vydání:
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.
Škoda, že Pg neřekne, o jaké pole se jedná, když je to pole. Je to však pro ni obtížné, protože při analýze řetězcových literálů obvykle neví, která hodnota půjde do kterého pole. Povolit log_statement = 'all'
v postgresql.conf
, ALTER USER ... SET
, ALTER DATABASE ... SET
, nebo na relaci s SET log_statement = 'all'
poté znovu otestujte a prozkoumejte protokoly dotazů.
Podívejte se také na definice tabulek pomocí \dt
v psql
abyste viděli, co může mít typ numeric(8,2)
a může být příčinou problému.
Pokud jde o to, proč to funguje lokálně:Je místní DB PostgreSQL? Zdá se, že někteří uživatelé Rails mají velmi zvláštní nastavení, kde používají SQLite lokálně a PostgreSQL na Heroku. To je recept na chaos a problémy s nasazením. Při vývoji a testování používejte stejnou databázi. Pokud je Lokálně PostgreSQL, je to stejná verze?