我想将高价值的货币值存储到数据库中。
我试图在迁移中使用integer
字段,但是我得到以下错误
PG::NumericValueOutOfRange: ERROR: numeric field overflow
DETAIL: A field with precision 8, scale 2 must round to an absolute value less than 10^6.
所以我尝试使用精度为
的十进制t.decimal :value, precision: 30, scale: 2
当我输入
时,我再次得到相同的错误我想知道的是,这是可能的,以及如何将1000000.0
这样的值保存到数据库中。
我试图在迁移中使用整数字段,但是我得到以下错误
PG::NumericValueOutOfRange: ERROR: numeric field overflow DETAIL: A field with precision 8, scale 2 must round to an absolute value less than 10^6.
那是个误解。错误信息是针对数据类型numeric
-numeric(8,2)
的,而不是integer
。
解决方案直接使用numeric
没有精度和尺度。它完全按照给定的方式存储十进制数(包含任意数量的小数)。
decimal
是Postgres中numeric
的同义词。
如果你没有小数,考虑integer
(最大2^31 - 1)或bigint
(最大2^63 - 1)。
相关:
- PostgreSQL:货币应该使用哪种数据类型?