在PostgreSQL中生成自动递增主键的可接受方法是什么?



没有序列和触发器就没有简单的方法吗?我有一般的SQL技能,我想使用pl/sql(PostgreSQL)的行业标准方法。我基本上是从Spring Security转换此示例表:

create table group_members (
    id bigint generated by default as identity(start with 0) primary key,
    username varchar(50) not null,
    group_id bigint not null,
    constraint fk_group_members_group foreign key(group_id) references groups(id));

到目前为止,我拥有的:

CREATE TABLE auth_group_members (
    id NUMBER,
    username VARCHAR(50) NOT NULL,
    group_id NUMBER NOT NULL,
    CONSTRAINT "FK_AuthGroupMembers" FOREIGN KEY(group_id) REFERENCES auth_groups(id)
);

标准方法是使用 serialbigserial

数据类型 serial 和 bigserial 不是真正的类型,而只是创建唯一标识符列的符号便利(类似于其他一些数据库支持的 AUTO_INCREMENT 属性)。
[...]
因此,我们创建了一个整数列,并安排从序列生成器分配其默认值。

因此,您将使用如下所示的内容创建表:

CREATE TABLE auth_group_members (
    id bigserial primary key,
    username VARCHAR(50) NOT NULL,
    group_id NUMBER NOT NULL,
    CONSTRAINT "FK_AuthGroupMembers" FOREIGN KEY(group_id) REFERENCES auth_groups(id)
);

serialbigserial 类型确实会在后台创建序列,但您永远不必直接使用该序列。

在 PostgreSQL 10 中可以使用 identity columns 。下面是示例:

create table group_members (
    id bigint generated by default as identity(start with 1) primary key,
    username varchar(50) not null,
    group_id bigint not null
    );

此外:

  1. 关于标识列与串行的好文章。
  2. PostgreSQL 文档以获取更多信息(Ctrl+F 并搜索"AS IDENTITY")。

最新更新