一、postgresql中的序列
1.1 場景需求
需要向下圖一樣,需要對產品編碼編碼設置一個序列。編碼規則 SKU + 序列號:
1.2 序列
序列是基於bigint算法的,因此範圍是不能超過一個八字節 整數的範圍(-9223372036854775808 到 9223372036854775807)
。
由於nextval和setval調用絕不會回滾, 如果需要序數的"無間隙"分配,則不能使用序列對象。可以 通過在一個只包含一個計數器的表上使用排他鎖來構建無間隙的分配, 但是這種方案比序列對象開銷更大,特別是當有很多事務併發請求序數時
創建和使用語法:
CREATE SEQUENCE serial START 101;
SELECT nextval('serial');
nextval
---------
101
本節描述用於操作序列對象的函數,序列對象也被稱爲序列生成器或者就是序列。序列對象都是用CREATE SEQUENCE創建的特殊的單行表。序列對象通常用於爲表的行生成唯一的標識符。表 中列出的這些序列函數,可以爲我們從序列對象中獲取連續的序列值提供了簡單的、多用戶安全的 方法。
獲取序列值是安全的,可以用來和其他鍵組合形成唯一主鍵。