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

10 postgresql auto-increment

没有序列和触发器,没有简单的方法可以做到这一点吗?我有平均的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));
Run Code Online (Sandbox Code Playgroud)

到目前为止我所拥有的:

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)
);
Run Code Online (Sandbox Code Playgroud)

mu *_*ort 13

标准方法是使用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)
);
Run Code Online (Sandbox Code Playgroud)

serialbigserial类型确实创造了一个幕后序列,但你从来没有直接的序列工作.

  • 原始表说`id bigint ...`所以更好的等价物将是'bigserial`. (2认同)
  • @ hal100001:您可能想要为[PostgreSQL文档](http://www.postgresql.org/docs/manuals/)添加书签,它非常好,甚至包含索引. (2认同)