postgres - bigint 超出范围错误,用于非常大的数字的数据类型

San*_*ino 5 sql postgresql

我正在尝试存储一些散列(最初以十六进制),但我将它们转换为 int 以保存在 pgsql 中,但得到

select 12347933502038296527::bigint

ERROR:  bigint out of range
********** Error **********
ERROR: bigint out of range
SQL state: 22003
Run Code Online (Sandbox Code Playgroud)

我意识到数字对于int8类型来说太大了,我应该使用什么数据类型而不是 int8?将decimal工作我的情况?有没有其他策略可以拯救如此大的数字?

Gor*_*off 7

Bigint 是相当大的。需要比这更大的东西是不寻常的。在大多数数据库中,这是您可以使用本机二进制表示的范围。 Decimal/numeric通常允许稍大的精度。

相比之下,Postgres以基本上无限的精度支持numeric/ decimal,如文档中所述。

以下直接工作:

select 12347933502038296527::decimal
Run Code Online (Sandbox Code Playgroud)

如果你想更具体:

select 12347933502038296527::decimal(20, 0)
Run Code Online (Sandbox Code Playgroud)

也就是说,通常使用如此大的数字作为 ID。在这种情况下,您可能希望使用字符串而不是数字表示。例如,字符串具有保留前导零的优点。

  • *“需要比这更大的东西是不寻常的。”*在加密货币中,自 10e18 wei = 1 ETH 以来,您通常会遇到很大的数字。 (5认同)