PostgreSQL SEQUENCE 序列生成器
在本文中,我们介绍了如何在 PostgreSQL 中创建序列,使用序列和删除序列。
PostgreSQL SEQUENCE
用于生成一个有序的数字序列。它被称为序列、序列对象或者序列生成器。
您可以使用 CREATE SEQUENCE
语句创建一个序列,使用 DROP SEQUENCE
删除一个序列。
PostgreSQL CREATE SEQUENCE
语法
要在 PostgreSQL 中创建一个序列,请按照如下语法使用 CREATE SEQUENCE
语句:
CREATE [ TEMPORARY | TEMP ] SEQUENCE [ IF NOT EXISTS ] seq_name
[ AS data_type ]
[ INCREMENT [ BY ] increment ]
[ MINVALUE minvalue | NO MINVALUE ]
[ MAXVALUE maxvalue | NO MAXVALUE ]
[ START [ WITH ] start ]
[ CACHE cache ]
[ [ NO ] CYCLE ]
[ OWNED BY { table_name.column_name | NONE } ]
解释说明:
TEMPORARY | TEMP
-
指定当前序列是一个临时序列。您只能在当前会话中使用。它会在会话结束时被自动删除。 它是可选的。
IF NOT EXISTS
-
如果指定,如果存在同名的序列,则不会引发错误。
seq_name
-
要创建的序列的名称。
data_type
-
它指示了这个序列的数据类型。可用值:
smallint
,integer
, 和bigint
,并且bigint
是默认值。 INCREMENT [ BY ] increment
-
序列增长的步幅,可以是整数或者负数。正值将产生一个升序序列,负值将产生一个降序序列。默认是值 1。
MINVALUE minvalue | NO MINVALUE
-
minvalue
是序列的最小值。NO MINVALUE
意味着使用数据类型的最小值。 升序序列的默认值是 1, 降序序列的默认值是数据类型的最小值。 MAXVALUE maxvalue | NO MAXVALUE
-
maxvalue
是序列的最大值。NO MAXVALUE
意味着使用数据类型的最大值。 降序序列的默认值是 1, 升序序列的默认值是数据类型的最大值。 START [ WITH ] start
-
start
是此序列的起始值。升序序列的默认值是minvalue
,降序序列的默认值是maxvalue
。 CACHE cache
-
cache
是缓存在内存中的序列值的数量,以便可以快速访问。 默认值是 1, 1 也是可接受的最小值。 [ NO ] CYCLE
-
指示序列是否可循环的。 如果指定
NO CYCLE
,那么序列到结尾的时候,再取值则会发生错误。 OWNED BY { table_name.column_name | NONE }
-
将此序列与指定表的列关联起来。如果此列被删除,此序列会被自动删除。
PostgreSQL DROP SEQUENCE
语法
要在 PostgreSQL 中删除一个或者多个序列,请按照如下语法使用 DROP SEQUENCE
语句:
DROP SEQUENCE [ IF EXISTS ] seq_name [, ...]
[ CASCADE | RESTRICT ];
解释说明:
IF EXISTS
-
如果指定的序列不存在不会抛出一个错误。
seq_name
-
要删除的序列的名称。
CASCADE
-
自动删除依赖于此序列的对象,并依次删除依赖这些对象的对象。
RESTRICT
-
如果任何对象依赖此序列,则拒绝删除它。这是默认值。
访问 PostgreSQL 序列
您可以使用以下三个函数操作 PostgreSQL 序列:
您可以使用以下语句查看指定的序列:
SELECT * FROM seq_name;
PostgreSQL 序列实例
创建一个从 10 开始步长为 10 的升序序列:
CREATE SEQUENCE asc_seq
INCREMENT 10
START 10;
使用以下 nextval()
函数从序列中获取下一个值:
SELECT nextval('asc_seq');
nextval
---------
10
(1 row)
再次使用以下 nextval()
函数从序列中获取下一个值:
SELECT nextval('asc_seq');
nextval
---------
20
(1 row)
使用 currval()
函数获取序列的当前的值:
SELECT currval('asc_seq');
currval
---------
20
(1 row)
使用 setval()
函数设置序列的当前值:
SELECT setval('asc_seq', 50);
setval
--------
50
(1 row)
再次使用以下 nextval()
函数从序列中获取下一个值:
SELECT nextval('asc_seq');
nextval
---------
60
(1 row)
要查看此序列,请使用以下 SELECT 语句:
SELECT * FROM asc_seq;
last_value | log_cnt | is_called
------------+---------+-----------
60 | 32 | t
(1 row)
结论
在 PostgreSQL 中,您可以使用 CREATE SEQUENCE
语句创建一个序列,使用 DROP SEQUENCE
删除一个序列。 您可以使用这 3 个函数 nextval
, currval
, 和 setval
操作序列。