我正在使用 postgresql,想知道有多大
id INTEGER PRIMARY KEY
可以比较
id SERIAL PRIMARY KEY
在 java 中,anint
是 4 个字节(32 位),因此它可以达到 2,147,483,647。这是postgresql的情况吗?如果是这样,这是否意味着我不能超过 2,147,483,647 行?
我正在使用 postgresql,想知道有多大
id INTEGER PRIMARY KEY
可以比较
id SERIAL PRIMARY KEY
在 java 中,anint
是 4 个字节(32 位),因此它可以达到 2,147,483,647。这是postgresql的情况吗?如果是这样,这是否意味着我不能超过 2,147,483,647 行?
这是一个方便的 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
smallserial 2 bytes small autoincrementing integer 1 to 32767
serial 4 bytes autoincrementing integer 1 to 2147483647
bigserial 8 bytes large autoincrementing integer 1 to 9223372036854775807
您的评估是正确的,如果您使用的数据类型不足,您将用完唯一 ID。
数据类型 smallserial、serial 和 bigserial 不是真正的类型,而只是用于创建唯一标识符列的符号方便(类似于某些其他数据库支持的 AUTO_INCREMENT 属性)
Abigserial
为 8 个字节长。如果这还不够,可以使用128 位 uuid:
create table t (
id uuid primary key
);
insert into t (id)
select uuid_generate_v1mc();
select * from t;
id
--------------------------------------
916bf7e6-f0c2-11e2-8d14-d372d5ab075f
该uuid_generate_v1mc
功能由uuid-ossp 模块提供
uuid 函数的主要优点是它们生成的 id 在不同系统中很可能是唯一的。Aserial
将在这些系统之间发生冲突。