日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

PostgreSQL 序列(Sequence)

發布時間:2023/11/5 C# 93 coder
生活随笔 收集整理的這篇文章主要介紹了 PostgreSQL 序列(Sequence) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

基本操作

--新增序列
CREATE SEQUENCE xxx_id_seq INCREMENT 1 -- 一次加多少 MINVALUE 1 -- 最小值 START 1 --從多少開始 CACHE 1 CYCLE;

--指定表使用
alter table xxx_table alter column id set DEFAULT nextval('xxx_id_seq')

--查詢序列
SELECT nextval('xxx_id_seq');

--刪除序列
DROP SEQUENCE xxx_id_seq;

--重置序列
alter sequence xxx_id_seq restart with 1

--修改序列(修改序列的最小值和最大值)
ALTER SEQUENCE sequence_name MINVALUE new_min_value MAXVALUE new_max_value;

serial數據類型

在 PostgreSQL 中,serial 是一種特殊的數據類型,用于自動生成唯一標識符(通常用作自增主鍵)的列。
serial 數據類型是一個偽類型,實際上是由以下兩個類型組成:

  • integer:用于存儲自增的數值。
  • sequence:用于生成唯一的數值序列。

當你在表中定義了一個列為 serial 類型時,它將自動創建一個與該列關聯的序列,并將默認值設為從該序列中獲取的下一個值。每次插入新行時,這個序列會自動遞增。

CREATE TABLE example_table (
    id serial PRIMARY KEY,
    name text
);

雖然 serial 類型是一種方便的方式來創建自增主鍵列,但實際上它只是一種語法糖,底層仍然使用了 integer 類型和序列。因此,你也可以手動創建一個 integer 類型的列,并使用序列來生成唯一的值。

序列溢出解決方案

方法1:主鍵序列 int4 修改為 int8

--創建表
CREATE TABLE "linq_test" (
  "linq_test_id" serial NOT NULL ,
  "merchant_id" int4 NOT NULL,
  "sop_task_id" int4 NOT NULL
)
--主鍵修改為int8
alter table linq_test alter linq_test_id type bigint;
--修改序列類型,重置最大值
ALTER SEQUENCE "linq_test_linq_test_id_seq" AS bigint MAXVALUE 9223372036854775807;

方法2:重置序列

重置前

重置后

新插入數據

如何提前排查序列溢出

--last_value 接近 max_value,表示序列快用完了 
SELECT * FROM pg_sequences where last_value is not null 
order by last_value  desc;

總結

以上是生活随笔為你收集整理的PostgreSQL 序列(Sequence)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。