Postgres:数据类型 - 如何在postgresql中存储int64

时间:2014-02-20 13:18:46

标签: postgresql

postgresql中的Bigint是8字节整数。它的范围是uint64的一半(一位用来表示整数)

我需要对列进行大量聚合,并且我认为与整数类型相比,NUMERIC类型的聚合速度较慢。

在这种情况下,我应该如何优化存储?

3 个答案:

答案 0 :(得分:1)

除非您有具体原因,否则请使用NUMERIC 更慢,速度慢得多,但这可能并不像你想象的那么重要。

你没有任何替代选择,因为PostgreSQL不支持SQL级别的无符号64位整数。您可以添加一个新的数据类型作为扩展模块,但它需要做很多工作。

您可以将无符号64位int按位推入64位有符号整数,因此maxuint64 / 2以上的值为负数。但是,对于聚合而言,这将完全被打破,并且通常会非常难看。

答案 1 :(得分:1)

如果输入为sum()

numeric将返回bigint,因此不会溢出

select sum(a)
from (values (9223372036854775807::bigint), (9223372036854775807)) s(a)
;
         sum          
----------------------
 18446744073709551614

http://www.postgresql.org/docs/current/static/functions-aggregate.html

答案 2 :(得分:0)

还有一个扩展,可在postgresql中提供其他uint64数据类型。参见Github

Peter Eisentraut