# 9.17.序列操作函数

本节介绍了在上操作的功能序列对象,也称为序列生成器或序列。序列对象是使用创建序列.序列对象通常用于为表中的行生成唯一标识符。中列出的序列函数表9.50,为从序列对象中获取连续序列值提供简单、多用户安全的方法。

表9.50.序列函数

作用

描述
nextval(regclass) →比基特

将序列对象前进到下一个值并返回该值。这是以原子方式完成的:即使执行多个会话nextval同时,每个都将安全地接收一个不同的序列值。如果序列对象是使用默认参数创建的,则nextval调用将返回以1开头的连续值。其他行为可以通过在模型中使用适当的参数来获得创建序列命令

此功能需要用法使现代化序列的特权。
塞特瓦尔 ( regclass, 比基特 [, 布尔值 ] ) → 比基特

设置序列对象的当前值,以及可选的你叫什么旗帜双参数表单设置序列的最后的价值字段设置为指定的值,并设置其你叫什么场到符合事实的,意思是下一个nextval将在返回值之前推进序列。将由报告的值库瓦尔也设置为指定的值。在三参数形式中,你叫什么可以设置为符合事实的错误的. 符合事实的与双参数形式具有相同的效果。如果设置为错误的下一个nextval将精确返回指定的值,序列前进从以下内容开始nextval。此外库瓦尔在这种情况下没有改变。例如

<br/>选择setval('myseq',42);下一步nextval将返回43<br/>选择setval('myseq',42,true);同上<br/>选择setval('myseq',42,false);下一步nextval将返回42<br/><br/>

由返回的结果塞特瓦尔只是第二个参数的值。

此功能需要使现代化序列的特权。
库瓦尔 ( regclass ) → 比基特

返回最近由nextval用于当前会话中的此序列。(如果nextval在此会话中从未调用过此序列。)因为这将返回一个会话本地值,所以无论是否执行了其他会话,它都会给出一个可预测的答案nextval自本届会议以来。

此功能需要用法选择序列的特权。
拉斯瓦尔 () → 比基特

返回最近由返回的值nextval在本届会议上。此功能与库瓦尔,只不过它不是将序列名作为参数,而是引用任何一个序列nextval最近一次是在本届会议上提出的。打电话是错误的拉斯瓦尔如果nextval本次会议尚未召开。

此功能需要用法选择上次使用序列的权限。

# 小心

为了避免阻止从同一序列中获取数字的并发事务,通过nextval如果调用事务稍后中止,则不会回收以重新使用。这意味着事务中止或数据库崩溃可能会导致分配值序列中出现间隙。这也可以在没有事务中止的情况下发生。例如插入带着关于冲突子句将计算要插入的元组,包括执行任何必需的操作nextval在检测到任何可能导致其遵循关于冲突取而代之的是统治。因此,PostgreSQL序列对象不能用于获取“无间隙”序列.

同样,序列状态的更改也由塞特瓦尔对其他事务立即可见,并且在调用事务回滚时不会撤消。

如果数据库集群在提交包含nextval塞特瓦尔调用时,序列状态更改可能不会进入持久性存储,因此不确定在集群重新启动后,序列是否将具有其原始状态或更新状态。这对在数据库中使用序列是无害的,因为未提交事务的其他影响也不可见。但是,如果希望使用序列值在数据库之外持久化,请确保nextval在这样做之前,电话已被提交。

序列函数操作的序列由regclass参数,它只是pg_类系统目录。但是,由于regclass数据类型的输入转换器将为您完成这项工作。看见第8.19节详细信息。