I would like to store high value currency values into the DB.
I tried to use an integer field in my migration, however I get following error
PG::NumericValueOutOfRange: ERROR: numeric field overflow
DETAIL: A field with precision 8, scale 2 must round to an absolute value less than 10^6.
So I then tried to use decimal with precision
t.decimal :value, precision: 30, scale: 2
Once gain I am getting the same error when I enter
What I would like to know, is it possible, and how can I save a value like 1000000.0 into the database.
CodePudding user response:
I tried to use an integer field in my migration, however I get following error
PG::NumericValueOutOfRange: ERROR: numeric field overflow DETAIL: A field with precision 8, scale 2 must round to an absolute value less than 10^6.
That's a misunderstanding. The error message is for data type numeric - numeric(8,2) to be precise - not integer.
Solution
Just use numeric without precision and scale. It stores decimal number (with any amount of fractional digits) exactly as given.
decimal is a synonym of numeric in Postgres.
If you don't have fractional digits, consider integer (max 2^31 - 1) or bigint (max 2^63 - 1).
Related:
