postgresql中的id可以有多大
我正在使用postgresql,我想知道它有多大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
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