欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

PostgreSQL Sequence序列的使用详解

程序员文章站 2022-03-13 23:00:26
postgresql是一种关系型数据库,和oracle、mysql一样被广泛使用。平时工作主要使用的是postgresql,所以有必要对其相关知识做一下总结和掌握,先总结下序列。一、 sequence...

postgresql是一种关系型数据库,和oracle、mysql一样被广泛使用。平时工作主要使用的是postgresql,所以有必要对其相关知识做一下总结和掌握,先总结下序列。

一、 sequence序列

sequence是一种自动增加的数字序列,一般作为行或者表的唯一标识,用作代理主键。

1、sequence的创建

例子:创建一个seq_commodity,最小值为1,最大值为9223372036854775807,从1开始,增量的步长为1,缓存为1的循环排序sequence。

sql语句如下:

 create sequence seq_commodity
 increment 1
 minvalue 1
 maxvalue 9223372036854775807
 start 1
 cache 1 
 cycle; // 循环,表示到最大值后从头开始

2、查找sequence中的值

select nextval('seq_commodity');

这里nextval表示下一个值

3、修改 sequence

用alter sequence来修改,除了start以外的所有sequence参数都可以被修改,

alter sequence 的例子 (sql语句)

alter sequence seq_commodity 
 increment 10 
 maxvalue 10000 
 cycle 
 nocache ; 

当然如果想要修改start的值,可以先用 drop sequence删掉,然后再重新创建。

4、删除drop sequence

drop sequence seq_commodity;

5、sequence分配策略

调用select nextval(seq_ commodity);返回下一个序列号后,系统优先给用户分配一个序号,接着系统的次sequence立刻加上设置的步长(increment 1),不论此序号用户是否使用;

调用select currval(seq_ commodity);返回当前的序列号,该序列号只要没有被使用,就不会变化,如果当前请求一直使用,那么不会再分配给其他的请求,因为该序列号已经分配给当前请求。

补充:postgresql 获取 sequence 列表

我就废话不多说了,大家还是直接看代码吧~

select "c"."relname" from "pg_class" "c" where "c"."relkind" = 's';

结束~

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。如有错误或未考虑完全的地方,望不吝赐教。