更新时间:2025-09-19 GMT+08:00
分享

序列(Sequence)

简介

序列(Sequence)是一种数据库对象,用于生成数字队列。序列的值可以按照设定的增量递增或者递减。Sequence默认最大值为2^63-1,如果使用了Large标识则最大值可以支持到2^127-1。

示例

  • 序列的创建和使用
    --创建序列。
    gaussdb=# CREATE SEQUENCE seq_test
        START WITH 1
        INCREMENT BY 1
        MAXVALUE 99999;
    CREATE SEQUENCE
    
    --查看序列下一个值。
    gaussdb=# SELECT nextval('seq_test');
     nextval 
    ---------
           1
    (1 row)
    
    --查看序列当前值。
    gaussdb=# SELECT currval('seq_test');
     currval 
    ---------
           1
    (1 row)
    
    --删除序列。
    gaussdb=# DROP SEQUENCE seq_test;
    DROP SEQUENCE
  • 序列空洞
    序列设置缓存后虽然可以提升性能,但是也有可能产生空洞。
    --创建表。
    gaussdb=# CREATE TABLE tb_test(c1 int,c2 varchar);
    CREATE TABLE
    
    --创建与表关联的序列。
    gaussdb=# CREATE SEQUENCE seq_test
        START 1
        CACHE 10
        OWNED BY tb_test.c1;
    CREATE SEQUENCE
    
    --设置字段的默认值。
    gaussdb=# ALTER TABLE tb_test ALTER COLUMN c1 SET DEFAULT nextval('seq_test'::regclass);
    ALTER TABLE
    
    --插入数据。
    gaussdb=# INSERT INTO tb_test (c2) VALUES ('a');
    INSERT 0 1
    gaussdb=# INSERT INTO tb_test (c2) VALUES ('b');
    INSERT 0 1
    
    --退出数据库重新登录后再次插入数据。
    gaussdb=# INSERT INTO tb_test (c2) VALUES ('c');
    INSERT 0 1
    
    --查询数据,序列出现了空洞。
    gaussdb=# SELECT * FROM tb_test;
     c1 | c2 
    ----+----
      1 | a
      2 | b
     11 | c
    (3 rows)
    
    --删除表。
    gaussdb=# DROP TABLE tb_test;

相关文档