PostgreSQL中序列(sequence)的使用

-- 创建序列

CREATE SEQUENCE test.my_seq01
INCREMENT BY 1
MINVALUE 1
MAXVALUE 2147483647
START 1
CACHE 1
NO CYCLE;

 

-- 查询序列

SELECT
*
FROM information_schema.sequences
WHERE sequence_schema = 'test'
AND sequence_name = 'my_seq01'
order by sequence_name ;

 

--修改序列的最大值

ALTER SEQUENCE test.my_seq01 MAXVALUE 9223372036854775807 ;

 

-- 获取下一个序列

SELECT nextval('my_seq01'); 

 

-- 获取当前序列(不增加序列)

SELECT currval('my_seq01');

 

-- 设置当前值(小心使用)

SELECT setval('my_seq01', 2000);

  

-- 或者

ALTER SEQUENCE my_seq01 RESTART WITH 2000;

  


-- 创建表并引用序列

CREATE TABLE "test"."my_table01"
(
id  bigint not null default nextval('my_seq01'),
name text,
CONSTRAINT "my_table01_pkey" PRIMARY KEY ("id")
);

  

-- 插入数据

INSERT INTO "test"."my_table01"("name") VALUES('kate'),('wangwei'),('liuyang') ;

  

-- 查询数据

SELECT * FROM "test"."my_table01" ;

  

-- 创建表

CREATE TABLE "test"."my_table02"
(
id  bigint not null,
name text,
CONSTRAINT "my_table02_pkey" PRIMARY KEY ("id")
);

  

-- 将序列设置为表中某个字段的默认值

ALTER TABLE "test"."my_table02"  ALTER COLUMN id SET DEFAULT nextval('my_seq01');

 

-- 查询 序列 与 表、列的绑定关系

WITH column_sequence AS (
SELECT
table_schema,
table_name,
column_name,
substr(column_default, 10, length(column_default) - 21) AS sequence_name
FROM information_schema.columns
WHERE column_default LIKE 'nextval%'
)
SELECT
cs.table_name,
cs.column_name,
s.sequence_catalog,
s.sequence_schema,
s.sequence_name,
s.data_type,
s.start_value,
s.minimum_value,
s.maximum_value,
s.increment,
s.cycle_option
FROM information_schema.sequences s
JOIN column_sequence cs ON s.sequence_schema = cs.table_schema AND s.sequence_name = cs.sequence_name
WHERE sequence_catalog = 'gufen'
AND sequence_schema = 'middle'
ORDER BY cs.table_name, cs.column_name,s.sequence_name;

  

posted @ 2025-09-16 10:48  业余砖家  阅读(10)  评论(0)    收藏  举报