暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

PolarDB-PG原理解读——Sequence 使用、原理全面解析(二)

PolarDB农夫山泉 2023-08-29
111

PolarDB PostgreSQL版(以下简称 PolarDB-PG)是一款阿里云自主研发的企业级数据库产品,采用计算存储分离架构,兼容 PostgreSQL 与 Oracle。PolarDB-PG 的存储与计算能力均可横向扩展,具有高可靠、高可用、弹性扩展等企业级数据库特性。同时,PolarDB-PG 具有大规模并行计算能力,可以应对 OLTP 与 OLAP 混合负载;还具有时空、向量、搜索、图谱等多模创新特性,可以满足企业对数据处理日新月异的新需求。

setval

该接口的含义是,设置 Sequence 对象的序列值。

postgres=# select nextval('seq'); nextval --------- 4 (1 row) postgres=# select setval('seq', 1); setval -------- 1 (1 row) postgres=# select nextval('seq'); nextval --------- 2 (1 row)
复制

该方法可以将 Sequence 对象的序列值设置到给定的位置,同时可以将第一个序列值申请出来。如果不想申请出来,可以采用加入 false 参数的做法。

postgres=# select nextval('seq'); nextval --------- 4 (1 row) postgres=# select setval('seq', 1, false); setval -------- 1 (1 row) postgres=# select nextval('seq'); nextval --------- 1 (1 row)
复制

SQL接口

通过在 setval 来设置好 Sequence 对象的值以后,同时来设置 Sequence 对象的 is_called 属性。nextval 就可以根据 Sequence 对象的 is_called 属性来判断要返回的是否要返回设置的序列值。即:如果 is_calledfalsenextval 接口会去设置 is_calledtrue,而不是进行 increment。

CREATE/ALTER SEQUENCE

CREATEALTER SEQUENCE 用于创建/变更 Sequence 对象,其中 Sequence 属性也通过 CREATEALTER SEQUENCE 接口进行设置,前面已简单介绍部分属性,下面将详细描述具体的属性。

CREATE [ TEMPORARY | TEMP ] SEQUENCE [ IF NOT EXISTS ] 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 } ] ALTER SEQUENCE [ IF EXISTS ] name [ AS data_type ] [ INCREMENT [ BY ] increment ] [ MINVALUE minvalue | NO MINVALUE ] [ MAXVALUE maxvalue | NO MAXVALUE ] [ START [ WITH ] start ] [ RESTART [ [ WITH ] restart ] ] [ CACHE cache ] [ [ NO ] CYCLE ] [ OWNED BY { table_name.column_name | NONE } ]
复制
  • AS:设置 Sequence 的数据类型,只可以设置为 smallintintbigint;与此同时也限定了 minvaluemaxvalue 的设置范围,默认为 bigint 类型(注意,只是限定,而不是设置,设置的范围不得超过数据类型的范围)。
  • INCREMENT:步长,nextval 申请序列值的递增数量,默认值为 1。
  • MINVALUE / NOMINVALUE:设置/不设置 Sequence 对象的最小值,如果不设置则是数据类型规定的范围,例如 bigint 类型,则最小值设置为 PG_INT64_MIN(-9223372036854775808)
  • MAXVALUE / NOMAXVALUE:设置/不设置 Sequence 对象的最大值,如果不设置,则默认设置规则如上。
  • START:Sequence 对象的初始值,必须在 MINVALUEMAXVALUE 范围之间。
  • RESTART:ALTER 后,可以重新设置 Sequence 对象的序列值,默认设置为 start value。
  • CACHE / NOCACHE:设置 Sequence 对象使用的 Cache 大小,NOCACHE 或者不设置则默认为 1。
  • OWNED BY:设置 Sequence 对象归属于某张表的某一列,删除列后,Sequence 对象也将删除
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论