Rails:在PostgreSQL中存储高货币值



我想将高价值的货币值存储到数据库中。

我试图在迁移中使用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:货币应该使用哪种数据类型?

最新更新