postgresql中序列nextval的详细说明
  • 作者:admin
  • 发表时间:2021-05-01 07:51
  • 来源:未知

本文主要介绍postgresql中的sequence nextval的详细解释,有很好的参考价值,希望对大家有所帮助。来和边肖一起看看。

1.postgresql中的序列

1.1场景要求

如下图所示,需要为产品编码设置一个序列。编码规则SKU序列号:

1.2顺序

序列基于bigint算法,因此范围不能超过八字节整数(-9223372036854775808到92237203685475807)。

由于nextval和setval调用从不回滚,因此如果需要顺序的“无间隙”分配,则不能使用序列对象。您可以通过在只包含一个计数器的表上使用排他锁来构建无间隙分配,但是这种方案比序列对象更昂贵,尤其是当有许多事务同时请求序数时

创建和使用语法:

创建序列序列开始101;

SELECT next val(' serial ');

下一个值

-

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 (reg class,bigint,boolean) bigint重置序列对象的计数器值。该函数相当于上面的setval函数,只是is_called可以设置为true或false。如果设置为false,下一次nextval将返回该值,然后nextval将开始递增序列。