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

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

PolarDB农夫山泉 2023-08-29
133

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

特殊场景下的序列回滚

下面描述了一种序列回滚的场景

CREATE SEQUENCE postgres=# BEGIN; BEGIN postgres=# ALTER SEQUENCE seq maxvalue 10; ALTER SEQUENCE postgres=# select nextval('seq'); nextval --------- 1 (1 row) postgres=# select nextval('seq'); nextval --------- 2 (1 row) postgres=# ROLLBACK; ROLLBACK postgres=# select nextval('seq'); nextval --------- 1 (1 row)
复制

与之前描述的不同,此处 Sequence 对象受到了事务的保护,序列值发生了发生回滚。实际上,此处事务保护的是 ALTER SEQUENCE(DDL),而非 nextval(DML),因此此处发生的回滚是将 Sequence 对象回滚到 ALTER SEQUENCE 之前的状态,故发生了序列回滚现象。

DROP/TRUNCATE

  • DROP SEQUENCE,如字面意思,去除数据库中的 Sequence 对象。
  • TRUNCATE,准确来讲,是通过 TRUNCATE TABLE 完成 RESTART SEQUENCE
postgres=# CREATE TABLE tbl_iden (i INTEGER, j int GENERATED ALWAYS AS IDENTITY); CREATE TABLE postgres=# insert into tbl_iden values (100); INSERT 0 1 postgres=# insert into tbl_iden values (1000); INSERT 0 1 postgres=# select * from tbl_iden; i | j ------+--- 100 | 1 1000 | 2 (2 rows) postgres=# TRUNCATE TABLE tbl_iden RESTART IDENTITY; TRUNCATE TABLE postgres=# insert into tbl_iden values (1234); INSERT 0 1 postgres=# select * from tbl_iden; i | j ------+--- 1234 | 1 (1 row)
复制

此处相当于在 TRUNCATE 表的时候,执行 ALTER SEQUENCE RESTART

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论