PostgreSQL中对序列的详细操作

Stella981
• 阅读 419

转自: https://www.2cto.com/database/201803/727599.html

额外补充: https://www.cnblogs.com/mchina/archive/2013/04/10/3012493.html

还没找到想要的直接百度: PostgreSQL序列...

1. 创建序列

语法:

1 CREATE [ TEMPORARY | TEMP ] SEQUENCE name [ INCREMENT [ BY ] increment ]
2     [ MINVALUE minvalue | NO MINVALUE ] [ MAXVALUE maxvalue | NO MAXVALUE ]
3     [ START [ WITH ] start ] [ CACHE cache ] [ [ NO ] CYCLE ]
4     [ OWNED BY { table_name.column_name | NONE } ]

参数说明:

 1 TEMPORARY 或 TEMP
 2 如果声明了这个修饰词,那么该序列对象只为这个会话创建, 并且在会话结束的时候自动删除。在临时序列存在的时候, 除非用模式修饰的名字引用,否则同名永久序列是不可见的(在同一会话里)。
 3  
 4 name
 5 将要创建的序列名(可以用模式修饰)
 6  
 7 increment
 8 可选子句INCREMENT BY increment指定序列的步长。 一个正数将生成一个递增的序列,一个负数将生成一个递减的序列。缺省值是 1 。
 9  
10 minvalue
11 NO MINVALUE
12 可选的子句MINVALUE minvalue 指定序列的最小值。如果没有声明这个子句或者声明了NO MINVALUE, 那么递增序列的缺省为 1 ,递减序列的缺省为-263-1。
13  
14 maxvalue
15 NO MAXVALUE
16 可选的子句MAXVALUE maxvalue 指定序列的最大值。如果没有声明这个子句或者声明了NO MAXVALUE, 那么递增序列的缺省为263-1,递减序列的缺省为 -1 。
17  
18 start
19 可选的子句START WITH start 指定序列的起点。缺省初始值对于递增序列为minvalue, 对于递减序列为maxvalue。
20  
21 cache
22 可选的子句CACHE cache 为快速访问而在内存里预先存储多少个序列号。最小值(也是缺省值)是 1 , 表示一次只能生成一个值,也就是说没有缓存。
23  
24 CYCLE
25 NO CYCLE
26 CYCLE选项可用于使序列到达 maxvalue或 minvalue时可循环并继续下去。 也就是如果达到极限,生成的下一个数据将分别是 minvalue 或maxvalue。
27 如果声明了NO CYCLE,那么在序列达到其最大值之后任何对 nextval的调用都将返回一个错误。 如果既没有声明CYCLE也没有声明NO CYCLE, 那么NO CYCLE是缺省。
28  
29 OWNED BY table_name.column_name
30 OWNED BY NONE
31 OWNED BY选项将序列关联到一个特定的表字段上。这样, 在删除那个字段或其所在表的时候将自动删除绑定的序列。 指定的表和序列必须被同一个用户所拥有,并且在在同一个模式中。 默认的OWNED BY NONE表示不存在这样的关联。

实例:

1 create sequence serial 
2 increment by 2
3 minvalue 1
4 no maxvalue
5 start with 1;
6  
7 select nextval('serial');

2. 修改序列

语法:

1 ALTER SEQUENCE [ IF EXISTS ] name [ INCREMENT [ BY ] increment ]
2     [ MINVALUE minvalue | NO MINVALUE ] [ MAXVALUE maxvalue | NO MAXVALUE ]
3     [ START [ WITH ] start ]
4     [ RESTART [ [ WITH ] restart ] ]
5     [ CACHE cache ] [ [ NO ] CYCLE ]
6     [ OWNED BY { table_name.column_name | NONE } ]
7 ALTER SEQUENCE [ IF EXISTS ] name OWNER TO new_owner
8 ALTER SEQUENCE [ IF EXISTS ] name RENAME TO new_name
9 ALTER SEQUENCE [ IF EXISTS ] name SET SCHEMA new_schema

参数说明:

 1 name
 2 一个要修改的序列的名字(可以有模式修饰)。
 3  
 4 IF EXISTS
 5 当序列不存在时使用该选项不会出现错误消息,仅有一个通知。
 6  
 7 increment
 8 INCREMENT BY increment选项是可选的。 一个正数会让序列成为递增序列,负数则成为递减序列。如果没有声明,将沿用原来的递增值。
 9  
10 minvalue
11 NO MINVALUE
12 MINVALUE minvalue是一个可选选项,它决定一个序列可以生成的最小的值。 如果声明了NO MINVALUE,那么将使用缺省值,对于递增和递减的序列分别是1和-263-1。 如果没有声明则沿用当前的最小值。
13  
14 maxvalue
15 NO MAXVALUE
16 MAXVALUE maxvalue是一个可选选项,它决定一个序列可以生成的最大的值。 如果声明了NO MAXVALUE那么将使用缺省值,对于递增和递减的序列分别是263-1和-1。 如果没有声明则沿用当前的最大值。
17  
18 start
19 START WITH start是一个可选选项,它修改序列的起始值。 这对序列当前值没有影响;它仅设置将来的ALTER SEQUENCE RESTART命令将会使用的值。
20  
21 restart
22 RESTART [ WITH restart ]是一个可选选项,它改变序列的当前值。 这相当于用is_called = false参数调用setval 函数 :指定的值将会通过nextval的next调用返回。 不使用restart参数值来使用RESTART选项相当于使用CREATE SEQUENCE或由ALTER SEQUENCE START WITH设置的初始值。
23  
24 cache
25 CACHE cache选项打开序列号预分配功能以及为了快速存取而在内存中存储的功能。 最小值是1(表示每次只能生成一个数值,没有缓冲)。如果没有声明,将沿用旧的缓冲值。
26  
27 CYCLE
28 可选的 CYCLE选项用于设置升序序列或是降序序列在达到maxvalue或者minvalue的时候循环使用。 如果达到了极限, 那么生成的下一个数字将分别是minvalue或者maxvalue。
29  
30 NO CYCLE
31 如果声明了可选的NO CYCLE选项,任何在序列达到其极限后对nextval的调用都将返回错误。 如果未声明CYCLE或者NO CYCLE,那么将沿用原有的循环行为。
32  
33 OWNED BY table_name.column_name
34 OWNED BY NONE
35 OWNED BY选项将序列和一个表的特定字段关联, 这样,如果那个字段(或整个表)被删除了,那么序列也将被自动删除。 如果序列已经与表有关联后,使用这个选项后新关联将覆盖旧有的关联。 指定的表必须与序列的所有者相同并且在同一个模式中。 使用OWNED BY NONE将删除任何已经存在的关联,也就是让该序列变成"独立"序列。
36  
37 new_owner
38 序列新所有者的用户名。
39  
40 new_name
41 序列的新名称。
42  
43 new_schema
44 序列的新模式。

实例:

修改serial序列的起始值和步长。

1 alter sequence serial
2 increment by 3
3 restart with 10;
4  
5 select nextval('serial');

3. 删除序列

语法:

1 DROP SEQUENCE [ IF EXISTS ] name [, ...] [ CASCADE | RESTRICT ]

参数说明:

 1 IF EXISTS
 2 如果指定的序列不存在,那么发出一个 notice 而不是抛出一个错误。
 3  
 4 name
 5 序列名(可以有模式修饰)。
 6  
 7 CASCADE
 8 级联删除依赖序列的对象。
 9  
10 RESTRICT
11 如果存在任何依赖的对象,则拒绝删除序列。这个是缺省。

实例:

1 drop sequence serial;
点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Stella981 Stella981
2年前
Prometheus监控学习笔记之PromQL简单示例
0x00简单的时间序列选择返回度量指标http_requests_total的所有时间序列样本数据:http_requests_total返回度量指标名称为http_requests_total,标签分别是job"apiserver",handler"/api/comments"
Stella981 Stella981
2年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Stella981 Stella981
2年前
Android So动态加载 优雅实现与原理分析
背景:漫品Android客户端集成适配转换功能(基于目标识别(So库35M)和人脸识别库(5M)),导致apk体积50M左右,为优化客户端体验,决定实现So文件动态加载.!(https://oscimg.oschina.net/oscnet/00d1ff90e4b34869664fef59e3ec3fdd20b.png)点击上方“蓝字”关注我
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
unity将 -u4E00 这种 编码 转汉字 方法
 unity中直接使用 JsonMapper.ToJson(对象),取到的字符串,里面汉字可能是\\u4E00类似这种其实也不用转,服务器会通过类似fastjson发序列化的方式,将json转对象,获取对象的值就是中文但是有时服务器要求将传参中字符串中类似\\u4E00这种转汉字,就需要下面 publ
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这