没有序列和触发器,没有简单的方法吗?我有平均的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)
);
答案 0 :(得分:13)
标准方法是使用serial
or bigserial
:
数据类型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)
);
serial
和bigserial
类型会在幕后创建序列,但您无需直接使用序列。
答案 1 :(得分:1)
在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
);
此外: