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;
本文来自博客园,作者:业余砖家,转载请注明原文链接:https://www.cnblogs.com/yeyuzhuanjia/p/19094439

浙公网安备 33010602011771号