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 類型時,PostgreSQL 會自動創建一個相關的序列(Sequence),並將列與該序列關聯起來。每次向該表插入一行數據時,該列的值都會自動遞增。

序列溢出(超出範圍 int4最大值2147483647)

方法一:主鍵 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;

方法二:重置主鍵id

--重置序列 值爲1
alter sequence linq_test_linq_test_id_seq restart with 1
--主鍵重新賦值
UPDATE linq_test SET linq_test_id = nextval('linq_test_linq_test_id_seq');

重置前

重置後

序列溢出預警

--last_value 接近 max_value 表面序列快溢出了
SELECT * FROM pg_sequences where last_value is not null 
order by last_value  desc;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章