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?
我想将高价值的货币值存储到数据库中。
我试图在我的迁移中使用 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?