CREATE SEQUENCE
功能描述
在PostgreSQL兼容模式下,Vastbase支持创建序列功能。当创建临时序列时,会在会话退出时删除。
支持使用as data_type语法可选项,指定序列的数据类型。
注意事项
- 该功能仅在数据库兼容模式为PostgreSQL时能够使用(即创建DB时DBCOMPATIBILITY='PG'),在其他数据库兼容模式下不能使用该特性。
- 用户需要具备创建序列的权限。
- 该功能仅支持行存表。
- 该功能不支持在高可用场景下使用。
- 不支持在事务块中修改序列的maxvalue。
语法格式
CREATE [ TEMPORARY | TEMP ] [ LARGE ] SEQUENCE name
[ AS data_type ]
[ INCREMENT [ BY ] increment ]
[ MINVALUE minvalue | NO MINVALUE | NOMINVALUE] [ MAXVALUE maxvalue | NO MAXVALUE | NOMAXVALUE]
[ START [ WITH ] start ] [ CACHE cache ] [ [ NO ] CYCLE | NOCYCLE]
[ OWNED BY { table_name.column_name | NONE } ];
- [ AS data_type ]和[ TEMPORARY | TEMP ]语法功能仅在数据库兼容模式为PostgreSQL时能够使用(即创建DB时DBCOMPATIBILITY='PG'),在其他数据库兼容模式下不能使用该特性。
- [ LARGE ] 语法功能仅在集中模式下支持。
参数说明
TEMPOPARY | TEMP
如果声明了这个修饰词,那么该序列对象只为这个会话创建,并且在会话结束的时候自动删除。
name
序列的名称。
data_type
序列的数据类型,Vastbase G100支持的数据类型有smallint、integer和bigint,其中bigint是默认值。
increment
指定序列的步长。一个正数将生成一个递增的序列,一个负数将生成一个递减的序列。缺省值为1。
MINVALUE minvalue | NO MINVALUE| NOMINVALUE
执行序列的最小值。如果没有声明minvalue或者声明了NO MINVALUE,则递增序列的缺省值为1,递减序列的缺省值为-263-1。NOMINVALUE等价于NO MINVALUE。
MAXVALUE maxvalue | NO MAXVALUE| NOMAXVALUE
执行序列的最大值。如果没有声明maxvalue或者声明了NO MAXVALUE,则递增序列的缺省值为263-1,递减序列的缺省值为-1。NOMAXVALUE等价于NO MAXVALUE。
start
指定序列的起始值。缺省值:对于递增序列为minvalue,递减序列为maxvalue。
cache
为了快速访问,而在内存中预先存储序列号的个数。缺省值为1,表示一次只能生成一个值,也就是没有缓存。
不建议同时定义cache和maxvalue或minvalue。因为定义cache后不能保证序列的连续性,可能会产生空洞,造成序列号的浪费。
CYCLE
用于使序列达到maxvalue或者minvalue后可循环并继续下去。
如果声明了NO CYCLE,则在序列达到其最大值后任何对nextval的调用都会返回一个错误。
NOCYCLE的作用等价于NO CYCLE。
缺省值为NO CYCLE。
若定义序列为CYCLE,则不能保证序列的唯一性。
OWNED BY table_name.column_name | NODE
将序列和一个表的指定字段进行关联。这样,在删除那个字段或其所在表的时候会自动删除已关联的序列。关联的表和序列的所有者必须是同一个用户,并且在同一个模式中。需要注意的是,通过指定OWNED BY,仅仅是建立了表的对应列和sequence之间关联关系,并不会在插入数据时在该列上产生自增序列。
缺省值为OWNED BY NONE,表示不存在这样的关联。
通过OWNED BY创建的Sequence不建议用其他表,如果希望多个表共享Sequence,该Sequence不应该从属特定表。
示例
1、创建数据库my_test,检查兼容性。
CREATE DATABASE my_test DBCOMPATIBILITY 'PG'; \c my_test show sql_compatibility;
2、创建一个名为seq的临时序列,序列的起始值为10。
create temp sequence seq start 10;
3、查看这个序列。
\d seq
返回结果如下,表示可以查询到临时序列的信息。
Sequence "pg_temp__1_2_140135787915008.seq" Column | Type | Value ---------------+---------+--------------------- sequence_name | name | seq last_value | bigint | 10 start_value | bigint | 10 increment_by | bigint | 1 max_value | bigint | 9223372036854775807 min_value | bigint | 1 cache_value | bigint | 1 log_cnt | bigint | 0 is_cycled | boolean | f is_called | boolean | f uuid | bigint | 0 type_id | oid | 20
4、退出当前会话,进入新会话,查询seq序列。
\d seq
返回结果如下,显示没有序列seq。
Did not find any relation named "seq".