19

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

id INTEGER PRIMARY KEY

可以比较

id SERIAL PRIMARY KEY

在 java 中,anint是 4 个字节(32 位),因此它可以达到 2,147,483,647。这是postgresql的情况吗?如果是这样,这是否意味着我不能超过 2,147,483,647 行?

4

2 回答 2

47

这是一个方便的 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。

于 2013-07-19T21:07:52.470 回答
4

数据类型 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将在这些系统之间发生冲突。

于 2013-07-19T22:31:16.450 回答