创建和管理序列
Apache Cloudberry 中的序列对象是一种特殊的单行表,用作数字生成器。可以使用序列为插入表中的行生成唯一的整数标识符。在表的某一列中声明 SERIAL
类型时,系统会自动创建一个对应的序列计数器。
Apache Cloudberry 提供了用于创建、修改和删除序列的命令,也提供了内置函数来获取序列的下一个值(nextval()
)或将序列设置为指定起始值(setval()
)。
注意
Apache Cloudberry 不支持 PostgreSQL 的 currval()
和 lastval()
函数。
序列对象的属性包括序列名称、增量值、上次生成的值、最小值和最大值等。序列还有一个特殊的布尔属性 is_called
,它决定了 nextval()
是否会在返回值之前对序列进行自增。当 is_called
为 true
时,nextval()
会先递增再返回;当 is_called
为 false
时,nextval()
直接返回当前值,不执行递增。
创建序列
CREATE SEQUENCE
命令用于创建并初始化一个序列,序列名必须在同一个 schema 中唯一,不能与已有的序列、表、索引或视图重名。可以指定可选的起始值。例如:
CREATE SEQUENCE myserial START 101;
新建序列时,系统会将其 is_called
属性设为 false
。首次调用 nextval()
不会自增计数器,而是直接返回起始值,并将 is_called
设为 true
。
使用序列
通过 CREATE SEQUENCE
创建序列后,可以查看其属性,也可以使用内置函数进行操作。
查看序列属性
可以直接查询序列来查看其当前属性,例如查看名为 myserial
的序列:
SELECT * FROM myserial;