# 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节详细信息。