搭建云服务器-postgresql 中的序列nextval详解

这篇文章首要介绍了postgresql 中的序列nextval详解,具有很好的参考价值,希望对我们有所协助。一同跟从小编过来看看吧。

一、postgresql中的序列

1.1 场景需求

需求向下图一样,需求对产品编码编码设置一个序列。编码规则 SKU + 序列号:

1.2 序列

序列是基于bigint算法的,因而规模是不能超过一个八字节 整数的规模(-9223372036854775808 到 9223372036854775807)。

由于nextval和setval调用绝不会回滚, 如果需求序数的”无间隙”分配,则不能运用序列目标。能够 通过在一个只包括一个计数器的表上运用排他锁来构建无间隙的分配, 可是这种计划比序列目标开销更大,特别是当有很多事务并发恳求序数时

创立和运用语法:

CREATE SEQUENCE serial START 101;
SELECT nextval(‘serial’);
nextval
———
101

本节描绘用于搭建云服务器操作序列目标的函数,序列目标也被称为序列生成器或者就是序列。

序列目标都是用CREATE SEQUENCE创立的特殊的单行表。

序列目标一般用于为表的行生成仅有的标识符。

表 中列出的这些序列函数,能够为我们从序列目标中获取接连的序列值提供了简单的、多用户安全的 办法。

获取序列值是安全的,能够用来和其他键组合构成仅有主键。

弥补:PostgreSQL中序列相关函数 nextval、currval、lastval、setval、setval

PostgreSQL中序列首要涉及到的函数是

函数回来类型描绘

nextval(regclass)bigint递增序列目标到它的下一个数值而且回来该值。这个动作是主动完结的。即使多个会话并发运转nextval,每个进程也会安全地收到一个仅有的序列值。

currval(regclass)bigint在当时会话中回来最近一次nextval抓到的该序列的数值。(如果在本会话中从未在该序列上调用过 nextval,那么会报告一个错误。)请注意因为此函数回来一个会话规模的数值,而且也能给出一个可估计的成果,因而能够用于判断其它会话是否履行过nextval。

lastval()bigint回来当时会话里最近一次nextval回来的数值。这个函数等效于currval,仅仅它不用序列名为参数,它抓取当时会话里面最近一次nextval运用的序列。如果当时会话还没有调用过nextval,那么调用lastval将会报错。

setval(regclass, bigint)bigint重置序列目标的计数器数值。设置序列的last_value字段为指定数值而且将其is_called字段设置为true,表示下一次nextval将在回来数值之前递增该序列。

setval(regclass, bigint, boolean)bigint重置序列目标的计数器数值。功能等同于上面的setval函数,仅仅is_called能够设置为true或false。如果将其设置为false,那么下一次nextval将回来该数值,随后的nextval才开端递增该序列。

注意序列名中有大写字母时,regclass参数值需求用双引号括和单引号一同括起来,比方:

1select nextval(‘”ACT_ChecklistItem_Id_seq”‘);

除了setval函数,还有另一种办法也是修改sequence的start_value,也是会更新序列的当时值:

项目部署上去需求插入一些基础数据,所以新增数据的ID不是从1开端,修改sequence的start_value (下次履行nextval得到的是start_value,而不是start_value+1) 。

1alter sequence s_seq restart with 2

相当于

1select setval(‘s_seq’,2,false)