如何在PostgreSQL中创建一个uint256

9

如何在Postgres中创建一个uint256数据类型?似乎它们本地只支持最多8个字节的整数...

他们提供了带有用户指定精度的十进制和数字类型。对于我的应用程序,这些值是货币,所以我认为我应该使用numeric而不是decimal,或者这并不重要吗?

NUMERIC(precision,scale)

那么我应该使用 NUMERIC(78,0)吗? (2 ^ 256是78位数字)还是我需要 NUMERIC(155,0)并强制它始终为> = 0(2 ^ 512,155位数字,额外的位表示符号)?还是我应该使用decimal?


numericdecimal没有区别。 - user330315
2
numeric(78) 是一个不错的选择。 - Laurenz Albe
3
很好的问题。在处理以太坊时特别相关,因为该区块链将 uint256 用于许多不同的事情,例如转移金额和资产 ID。 - Thorkil Værge
2个回答

17

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


4

您可以创建一个域名。

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

这将创建一个可重复使用的uint_256数据类型,该数据类型被限制在2^256的范围内,并且通过只允许数字的规模为0(即使用小数值会抛出错误)来防止四舍五入误差。Solidity中没有像NULL这样的东西,因此该数据类型不应为可空。

试一试:dbfiddle


这种方法的好处是使意图更容易理解。查看一个有金额列的表定义,amount uint256numeric(78,0) 更容易理解。 您可以在此处找到使用域的一些缺点:https://dba.stackexchange.com/questions/152859/what-are-the-drawbacks-of-using-domains-to-store-metadata-about-the-column - Yacc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接