PostgreSQL 序列(Sequence)
生活随笔
收集整理的這篇文章主要介紹了
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)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: EFCore 使用FluntApi配置
- 下一篇: JUC并发编程学习(十一)四大函数式接口