濮阳杆衣贸易有限公司

主頁 > 知識庫 > postgresql 中的序列nextval詳解

postgresql 中的序列nextval詳解

熱門標簽:400電話申請客服 濟南外呼網絡電話線路 地圖標注要花多少錢 廣州電銷機器人公司招聘 江蘇400電話辦理官方 電銷機器人能補救房產中介嗎 天津開發(fā)區(qū)地圖標注app 移動外呼系統(tǒng)模擬題 電話機器人怎么換人工座席

一、postgresql中的序列

1.1 場景需求

需要向下圖一樣,需要對產品編碼編碼設置一個序列。編碼規(guī)則 SKU + 序列號:

1.2 序列

序列是基于bigint算法的,因此范圍是不能超過一個八字節(jié) 整數(shù)的范圍(-9223372036854775808 到 9223372036854775807)。

由于nextval和setval調用絕不會回滾, 如果需要序數(shù)的"無間隙"分配,則不能使用序列對象??梢?通過在一個只包含一個計數(shù)器的表上使用排他鎖來構建無間隙的分配, 但是這種方案比序列對象開銷更大,特別是當有很多事務并發(fā)請求序數(shù)時

創(chuàng)建和使用語法:

CREATE SEQUENCE serial START 101;
SELECT nextval('serial');
 nextval
---------
 101

本節(jié)描述用于操作序列對象的函數(shù),序列對象也被稱為序列生成器或者就是序列。

序列對象都是用CREATE SEQUENCE創(chuàng)建的特殊的單行表。

序列對象通常用于為表的行生成唯一的標識符。

表 中列出的這些序列函數(shù),可以為我們從序列對象中獲取連續(xù)的序列值提供了簡單的、多用戶安全的 方法。

獲取序列值是安全的,可以用來和其他鍵組合形成唯一主鍵。

補充:PostgreSQL中序列相關函數(shù) nextval、currval、lastval、setval、setval

PostgreSQL中序列主要涉及到的函數(shù)是

函數(shù) 返回類型 描述
nextval(regclass) bigint 遞增序列對象到它的下一個數(shù)值并且返回該值。這個動作是自動完成的。即使多個會話并發(fā)運行nextval,每個進程也會安全地收到一個唯一的序列值。
currval(regclass) bigint 在當前會話中返回最近一次nextval抓到的該序列的數(shù)值。(如果在本會話中從未在該序列上調用過 nextval,那么會報告一個錯誤。)請注意因為此函數(shù)返回一個會話范圍的數(shù)值,而且也能給出一個可預計的結果,因此可以用于判斷其它會話是否執(zhí)行過nextval。
lastval() bigint 返回當前會話里最近一次nextval返回的數(shù)值。這個函數(shù)等效于currval,只是它不用序列名為參數(shù),它抓取當前會話里面最近一次nextval使用的序列。如果當前會話還沒有調用過nextval,那么調用lastval將會報錯。
setval(regclass, bigint) bigint 重置序列對象的計數(shù)器數(shù)值。設置序列的last_value字段為指定數(shù)值并且將其is_called字段設置為true,表示下一次nextval將在返回數(shù)值之前遞增該序列。
setval(regclass, bigint, boolean) bigint 重置序列對象的計數(shù)器數(shù)值。功能等同于上面的setval函數(shù),只是is_called可以設置為true或false。如果將其設置為false,那么下一次nextval將返回該數(shù)值,隨后的nextval才開始遞增該序列。

注意序列名中有大寫字母時,regclass參數(shù)值需要用雙引號括和單引號一起括起來,比如:

select nextval('"ACT_ChecklistItem_Id_seq"');

除了setval函數(shù),還有另一種方法也是修改sequence的start_value,也是會更新序列的當前值:

項目部署上去需要插入一些基礎數(shù)據(jù),所以新增數(shù)據(jù)的ID不是從1開始,修改sequence的start_value (下次執(zhí)行nextval得到的是start_value,而不是start_value+1) 。

alter sequence s_seq restart with 2

相當于

select setval('s_seq',2,false)

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

您可能感興趣的文章:
  • PostgreSQL Sequence序列的使用詳解
  • PostgreSQL 序列綁定字段與不綁定字段的區(qū)別說明
  • PostgreSQL 序列增刪改案例
  • postgresql重置序列起始值的操作
  • postgresql 實現(xiàn)更新序列的起始值
  • postgresql修改自增序列操作
  • Postgresql數(shù)據(jù)庫之創(chuàng)建和修改序列的操作

標簽:辛集 海西 杭州 昭通 濮陽 溫州 榆林 寶雞

巨人網絡通訊聲明:本文標題《postgresql 中的序列nextval詳解》,本文關鍵詞  postgresql,中的,序列,nextval,;如發(fā)現(xiàn)本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統(tǒng)采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《postgresql 中的序列nextval詳解》相關的同類信息!
  • 本頁收集關于postgresql 中的序列nextval詳解的相關信息資訊供網民參考!
  • 推薦文章
    高平市| 怀仁县| 庆元县| 安庆市| 台中县| 鸡泽县| 莫力| 革吉县| 三台县| 京山县| 桦甸市| 无棣县| 太湖县| 松阳县| 鹤峰县| 和龙市| 崇信县| 浙江省| 灌阳县| 拉孜县| 香河县| 荣昌县| 专栏| 抚远县| 通海县| 维西| 温宿县| 金昌市| 安仁县| 嘉黎县| 安化县| 赤峰市| 合阳县| 开阳县| 厦门市| 赤城县| 博白县| 凌源市| 扶绥县| 浑源县| 衡东县|