postgresql中的序列nextval

一、postgresql中的序列

1.1 场景需求

需要向下图一样,需要对产品编码编码设置一个序列。编码规则 SKU + 序列号
postgresql中的序列nextval_第1张图片


1.2 序列

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

由于nextval和setval调用绝不会回滚, 如果需要序数的"无间隙"分配,则不能使用序列对象。可以 通过在一个只包含一个计数器的表上使用排他锁来构建无间隙的分配, 但是这种方案比序列对象开销更大,特别是当有很多事务并发请求序数时

创建和使用语法

CREATE SEQUENCE serial START 101;

SELECT nextval('serial');

 nextval
---------
     101

本节描述用于操作序列对象的函数,序列对象也被称为序列生成器或者就是序列。序列对象都是用CREATE SEQUENCE创建的特殊的单行表。序列对象通常用于为表的行生成唯一的标识符。表 中列出的这些序列函数,可以为我们从序列对象中获取连续的序列值提供了简单的、多用户安全的 方法。
postgresql中的序列nextval_第2张图片

获取序列值是安全的,可以用来和其他键组合形成唯一主键。


参考

  • 如何创建序列http://www.postgres.cn/docs/9.6/sql-createsequence.html
  • http://www.postgres.cn/docs/9.6/functions-sequence.html

你可能感兴趣的:(PostgreSQL)