如何正确地将id生成器序列与表关联

clo*_*ker 7 postgresql grails database-design

我正在使用Grails 3.0.7和Postgres 9.2.我对Postgres很新,所以这可能是一个愚蠢的问题.如何正确地将id生成器序列与表关联?我在某处读到,如果您创建一个具有serial数据类型的id列的表,那么它将自动为该表创建一个序列.

但是,该列似乎是使用某种类型创建的bigint.如何让Grails创建具有bigserial数据类型的列,这甚至可以解决我的问题?如果我想要每个表一个序列怎么办?我只是不确定如何设置它,因为我过去从未真正使用过Postgres.

Erw*_*ter 1

Postgres 10或更高版本中,请考虑IDENTITY使用列。看:


但是,该列似乎是使用 类型创建的bigint。如何让 Grails 创建具有bigserial数据类型的列,这是否可以解决我的问题?

这是预期的行为。将列定义为bigserial这就是您所要做的。Postgres数据类型smallserialserialbigserial分别创建一个smallintintbigint列,并附加专用序列。手册:

数据类型smallserialserialbigserial不是真正的类型,而仅仅是创建唯一标识符列的符号方便(类似于AUTO_INCREMENT某些其他数据库支持的属性)。在当前的实现中,指定:

CREATE TABLE tablename (
    colname SERIAL
);
Run Code Online (Sandbox Code Playgroud)

相当于指定:

CREATE SEQUENCE tablename_colname_seq;
CREATE TABLE tablename (
    colname integer NOT NULL DEFAULT nextval('tablename_colname_seq')
);
ALTER SEQUENCE tablename_colname_seq OWNED BY tablename.colname;
Run Code Online (Sandbox Code Playgroud)

大引述,我无法比手册更好地描述它。

有关的: