如何在 PostgreSQL 中创建 uint256

Byt*_*eMe 9 postgresql

如何在 Postgres 中创建 uint256 数据类型?看起来它们本身只支持最多 8 个字节的整数。

它们提供具有用户指定精度的小数和数字类型。对于我的应用程序,这些值是金钱,所以我假设我会使用数字而不是小数,或者这不重要吗?

NUMERIC(precision, scale)

那么我会用吗NUMERIC(78, 0)?(2^256 是 78 位数字)或者我需要这样做NUMERIC(155, 0)并强制它始终 >= 0 (2^512,155 位数字,额外的位代表符号)?或者我应该使用十进制?

Tho*_*rge 17

numeric(78,0)最大值为 9.999... * 10^77 > 2^256,因此这就足够了。


enr*_*r99 5

您可以创建一个域。

CREATE DOMAIN uint_256 AS NUMERIC NOT NULL
CHECK (VALUE >= 0 AND VALUE < 2^256)
CHECK (SCALE(VALUE) = 0)
Run Code Online (Sandbox Code Playgroud)

这将创建一个可重用的uint_256数据类型,该数据类型被限制在2^256限制范围内,并且还通过仅允许数字的小数位数为 0(即引发十进制值错误)来防止舍入错误。Solidity 中没有类似的情况NULL,因此数据类型不应该为空。

尝试一下:dbfiddle