clo*_*ker 7 postgresql grails database-design
我正在使用Grails 3.0.7和Postgres 9.2.我对Postgres很新,所以这可能是一个愚蠢的问题.如何正确地将id生成器序列与表关联?我在某处读到,如果您创建一个具有serial
数据类型的id列的表,那么它将自动为该表创建一个序列.
但是,该列似乎是使用某种类型创建的bigint
.如何让Grails创建具有bigserial
数据类型的列,这甚至可以解决我的问题?如果我想要每个表一个序列怎么办?我只是不确定如何设置它,因为我过去从未真正使用过Postgres.
在Postgres 10或更高版本中,请考虑IDENTITY
使用列。看:
但是,该列似乎是使用 类型创建的
bigint
。如何让 Grails 创建具有bigserial
数据类型的列,这是否可以解决我的问题?
这是预期的行为。将列定义为bigserial
,这就是您所要做的。Postgres伪数据类型smallserial
、serial
和bigserial
分别创建一个smallint
、int
或bigint
列,并附加专用序列。手册:
数据类型
smallserial
、serial
和bigserial
不是真正的类型,而仅仅是创建唯一标识符列的符号方便(类似于AUTO_INCREMENT
某些其他数据库支持的属性)。在当前的实现中,指定:Run Code Online (Sandbox Code Playgroud)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;
大引述,我无法比手册更好地描述它。
有关的: