postgresql中的id可以有多大

postgresql中的id可以有多大,postgresql,integer,primary-key,Postgresql,Integer,Primary Key,我正在使用postgresql,我想知道它有多大 id INTEGER PRIMARY KEY 可比 id SERIAL PRIMARY KEY 在java中,int是4个字节(32位),因此最多可以达到2147483647。postgresql就是这样吗?如果是,这是否意味着我不能通过2147483647行?这是一个方便的PostgreSQL图表: Name Storage Size Description Range sma

我正在使用postgresql,我想知道它有多大

id INTEGER PRIMARY KEY
可比

id SERIAL PRIMARY KEY

在java中,
int
是4个字节(32位),因此最多可以达到2147483647。postgresql就是这样吗?如果是,这是否意味着我不能通过2147483647行?

这是一个方便的PostgreSQL图表:

Name        Storage Size    Description                       Range
smallint    2 bytes         small-range integer               -32768 to +32767
integer     4 bytes         usual choice for integer          -2147483648 to +2147483647
bigint      8 bytes         large-range integer               -9223372036854775808 to 9223372036854775807
serial      4 bytes         autoincrementing integer          1 to 2147483647
bigserial   8 bytes         large autoincrementing integer    1 to 9223372036854775807

您的评估是正确的,如果您使用的数据类型不足,您的唯一ID就会用完

bigserial
的长度为8字节。如果这还不够,可以使用:

uuid\u generate\u v1mc
功能由


uuid函数的主要优点是,它们生成的id很可能在不同的系统中是唯一的。一个
序列
将在这些系统之间产生冲突。

这里我认为我处理的万亿记录表很大,无法想象需要超过九个五分之一的ID。嘿。。。人们害怕使用
bigint
uuid
密钥对于分布式系统来说非常方便,但对于密钥耗尽问题来说是不必要的。@CraigRinger由于生日悖论,bigint可能在“耗尽”之前很久就在密钥之间发生冲突。UUID有128位来避免这个问题。@PaulAJungwirth如果您随机生成密钥,则是。对于大序列,没有。。。但是如果您使用的是
bigint
(或者
bigserial
,两者是一样的)。
create table t (
    id uuid primary key
);
insert into t (id)
select uuid_generate_v1mc();
select * from t;
                  id                  
--------------------------------------
 916bf7e6-f0c2-11e2-8d14-d372d5ab075f