VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

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".