Rails: 在 PostgreSQL 中存储高货币值

Rails: Storing high currency values in 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 这样的值保存到数据库中。

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.

这是误会。错误消息针对数据类型 numeric - numeric(8,2) 准确 - 而不是 integer.

解决方案

只需使用numeric without precision and scale。它完全按照给定的方式存储十进制数(带有任意数量的小数位数)。

decimal 在 Postgres 中是 numeric 的同义词。

如果您没有小数位,请考虑 integer(最大 2^31 - 1)或 bigint(最大 2^63 - 1)。

相关:

  • PostgreSQL: Which Datatype should be used for Currency?