当前位置: 首页 > news >正文

PostgreSql 序列

一、概述

  在 PostgreSQL 中,序列用于生成唯一标识符,通常用于为表的主键列生成连续的唯一值。若目的仅是为表字段设置自增 id,可考虑序列类型来实现,可参考《PostgreSql 设置自增字段》

二、创建序列

2.1 语法

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

参数说明

TEMPORARY or TEMP:如果被指定,只会为这个会话创建序列对象,并且在会话退出时自动删除它。当临时序列存在时,已有的同名永久序列(在这个会话中)会变得不可见,不过可以用模式限定的名称来引用同名永久序列。
IF NOT EXISTS:如果已经存在一个同名的关系时不要抛出错误。这种情况下会发出一个提示。注意这不保证现有的关系与即将创建的序列相似它甚至可能都不是一个序列。
name:要创建的序列的名称(可以是模式限定的)。
data_type:可选的子句 AS data_type 制定序列的数据类型。有效类型是 smallint、integer、和 bigint。默认是 bigint。 数据类型决定了序列的默认最小和最大值。
increment:可选的子句 INCREMENT BY increment 指定为了创建新值会把哪个值加到当前序列值上。一个正值将会创造一个上升序列,负值会创造一个下降序列。默认值是 1。
minvalue|NO MINVALUE:可选的子句 MINVALUE minvalue 决定一个序列能产生的最小值。如果没有提供这个子句或者指定了 NO MINVALUE,那么会使用默认值。升序序列的默认值为1。降序序列的默认值为数据类型的最小值。
maxvalue|NO MAXVALUE:可选的子句 MAXVALUE maxvalue 决定该序列的最大值。如果没有提供这个子句或者指定了 NO MAXVALUE,那么将会使用默认值。升序序列的默认值是数据类型的最大值。降序序列的默认值是 -1。
start:可选的子句 START WITH start 允许序列从任何地方开始。对于上升序列和下降序列来说,默认的开始值分别是 minvalue 和 maxvalue。
cache:可选的子句 CACHE cache 指定要预分配多少个序列数并且把它们放在内存中以便快速访问。最小值为 1 (一次只生成 一个值,即没有缓存),默认值也是 1。
CYCLE|NO CYCLE:对于上升序列和下降序列,CYCLE 选项允许序列 在分别达到 maxvalue 和 minvalue 时回卷。如果达到该限制,下一个产生的数字将分别是 minvalue 和 maxvalue。如果指定了 NO CYCLE,当序列到达其最大值后任何 nextval 调用将返回一个错误。如果 CYCLE 和 NO CYCLE 都没有被指定,则默认为 NO CYCLE。
OWNED BY table_name.column_name|OWNED BY NONE:OWNED BY 选项导致序列被与一个特定的表列关联在一起,这样如果该列(或者整个表)被删除,该序列也将被自动删除。指定的表必须和序列具有相同的拥有者并且在同一个模式中。默认选项 OWNED BY NONE指定该序列不与某个列关联。

常用操作函数

操作函数描述
nextval ( regclass ) → bigint将序列对象推进到下一个值并返回该值。
setval ( regclass, bigint [, boolean ] ) → bigint设置序列对象的当前值,boolean 为 false 时设置下个序列值。
currval ( regclass ) → bigint返回 nextval 在当前会话中为该序列最近获取的值。
lastval () → bigint返回 nextval 在当前会话中最近返回的值。

2.2 示例

--创建序列
postgres=# create sequence seq_t;
CREATE SEQUENCE--插入数据时使用序列
postgres=# insert into t values(nextval('seq_t'),'zhao');
INSERT 0 1
postgres=# insert into t values(nextval('seq_t'),'qian');
INSERT 0 1
postgres=# insert into t values(nextval('seq_t'),'sun');
INSERT 0 1
postgres=# select * from t;id | name
----+------1 | zhao2 | qian3 | sun
(3 rows)--查询序列当前值
postgres=# select currval('seq_t');currval
---------3
(1 row)--更新序列值为下一个
postgres=# select nextval('seq_t');nextval
---------4
(1 row)postgres=# select currval('seq_t');currval
---------4
(1 row)--设置序列为指定值
postgres=# select setval('seq_t',100);setval
--------100
(1 row)postgres=# select currval('seq_t');currval
---------100
(1 row)--建表时字段默认使用序列(通常序列字段设置为主键)
postgres=# create table t(id int default nextval('seq_t')primary key,name varchar);
CREATE TABLE
postgres=# \d tTable "public.t"Column |       Type        | Collation | Nullable |          Default
--------+-------------------+-----------+----------+----------------------------id     | integer           |           | not null | nextval('seq_t'::regclass)name   | character varying |           |          |
Indexes:"t_pkey" PRIMARY KEY, btree (id)

三、修改序列

3.1 语法

ALTER SEQUENCE [ IF EXISTS ] name[ AS data_type ][ INCREMENT [ BY ] increment ][ MINVALUE minvalue | NO MINVALUE ] [ MAXVALUE maxvalue | NO MAXVALUE ][ START [ WITH ] start ][ RESTART [ [ WITH ] restart ] ][ CACHE cache ] [ [ NO ] CYCLE ][ OWNED BY { table_name.column_name | NONE } ]
ALTER SEQUENCE [ IF EXISTS ] name OWNER TO { new_owner | CURRENT_USER | SESSION_USER }
ALTER SEQUENCE [ IF EXISTS ] name RENAME TO new_name
ALTER SEQUENCE [ IF EXISTS ] name SET SCHEMA new_schema

参数说明

name:要修改的序列的名称(可以是模式限定的)。
IF EXISTS:在序列不存在时不要抛出一个错误。这种情况下会发出一个提示。
data_type:可选子句 AS data_type 改变序列的数据类型。有效类型是 smallint、integer 和 bigint。当且仅当先前的最小值和最大值是旧数据类型的最小值或最大值时(换句话说,如果序列是使用 NO MINVALUE 或 NO MAXVALUE,隐式或显式创建的),则更改数据类型会自动更改序列的最小值和最大值。否则,将保留最小值和最大值,除非将新值作为同一命令的一部分给出。如果最小值和最大值不符合新的数据类型,则会生成错误。
increment:子句 INCREMENT BY increment 是可选的。一个正值将产生一个上升序列,一个负值会产生一个下降序列。如果没有指定,旧的增量值将被保持。
minvalue|NO MINVALUE:可选的子句 MINVALUE minvalue 决定一个序列能产生的最小值。如果指定了 NO MINVALUE,上升序列和下降序列的默认值分别是 1 和 数据类型的最小值。如果这些选项都没有被指定,将保持当前的最小值。
maxvalue|NO MAXVALUE:可选的子句 MAXVALUE maxvalue 决定一个序列能产生的最大值。如果指定了 NO MAXVALUE,上升序列和下降序列的默认值分别是数据类型的最大值和 -1。如果这些选项都没有被指定,将保持当前的最大值。
start:可选的子句 START WITH start 更改该序列被记录的开始值。这对于当前序列值没有影响,它会简单地设置未来 ALTER SEQUENCE RESTART 命令将会使用的值。
restart:可选的子句 RESTART [ WITH restart ] 更改该序列的当前值。这类似于用 is_called = false 调用setval函数:被指定的值将会被 下一次 nextval 调用返回。写上没有 restart 值的 RESTART 等效于提供被 CREATE SEQUENCE 记录的或者上一次被 ALTER SEQUENCE START WITH 设置的开始值。与 setval 调用相比,序列上的 RESTART 操作是事务性的并阻止并发事务从同一序列中获取数字。如果这不是所需的操作模式,则应使用 setval。
cache:子句 CACHE cache 使得序列数字被预先分配并且保存在内存中以便更快的访问。最小值是 1(每次只产生一个值,即无缓存)。如果没有指定,旧的缓冲值将被保持。
CYCLE:可选的 CYCLE 关键词可以被用来允许该序列在达到 maxvalue(上升序列)或 minvalue(下降序列)时回卷。如果到达该限制,下一个被产生的数字将分别是 minvalue 或者 maxvalue。
NO CYCLE:如果指定了可选的 NO CYCLE 关键词,任何在该序列到达其最大值后的 nextval 调用将会返回一个错误。如果既没有指定 CYCLE 也没有指定 NO CYCLE,旧的循环行为将被保持。
OWNED BY table_name.column_name|OWNED BY NONE:OWNED BY 选项导致该序列与一个特定的表列相关联,这样如果该列(或者整个表)被删除,该序列也会被自动删除。如果指定,这种关联会替代之前为该序列指定的任何关联。被指定的表必须具有相同的 拥有者并且与该序列在同一个模式中。指定 OWNED BY NONE 可以移除任何现有的关联,让该序列 “自立”。
new_owner:该序列的新拥有者的用户名。
new_name:该序列的新名称。
new_schema:该序列的新模式。

3.2 示例

--修改序列隶属于表,删除表时索引也关联删除
postgres=# alter sequence seq_t owned by t.id;
ALTER SEQUENCE
postgres=# \d seq_tSequence "public.seq_t"Type  | Start | Minimum |       Maximum       | Increment | Cycles? | Cache
--------+-------+---------+---------------------+-----------+---------+-------bigint |     1 |       1 | 9223372036854775807 |         1 | no      |     1
Owned by: public.t.idpostgres=# drop table t;
DROP TABLE
postgres=# \d seq_t
Did not find any relation named "seq_t".

四、删除序列

4.1 语法

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

参数说明

IF EXISTS:如果该序列不存在则不要抛出一个错误,而是发出一个提示。
name:一个序列的名称(可以是模式限定的)。
CASCADE:自动删除依赖于该序列的对象,然后删除所有依赖于那些对象的对象。
RESTRICT:如果有任何对象依赖于该序列,则拒绝删除它。这是默认值。

4.2 示例

postgres=# drop sequence seq_t;
DROP SEQUENCE

相关文章:

PostgreSql 序列

一、概述 在 PostgreSQL 中,序列用于生成唯一标识符,通常用于为表的主键列生成连续的唯一值。若目的仅是为表字段设置自增 id,可考虑序列类型来实现,可参考《PostgreSql 设置自增字段》 二、创建序列 2.1 语法 CREATE [ TEMPOR…...

【深度学习目标检测】六、基于深度学习的路标识别(python,目标检测,yolov8)

YOLOv8是一种物体检测算法,是YOLO系列算法的最新版本。 YOLO(You Only Look Once)是一种实时物体检测算法,其优势在于快速且准确的检测结果。YOLOv8在之前的版本基础上进行了一系列改进和优化,提高了检测速度和准确性。…...

Vue3上传图片和删除图片

<div class"illness-img"><van-uploader:after-read"onAfterRead"delete"onDeleteImg"v-model"fileList"max-count"9":max-size"5 * 1024 * 1024"upload-icon"photo-o"upload-text"上传图…...

华为配置VRRP负载分担示例

组网需求 如图1所示&#xff0c;HostA和HostC通过Switch双归属到SwitchA和SwitchB。为减轻SwitchA上数据流量的承载压力&#xff0c;HostA以SwitchA为默认网关接入Internet&#xff0c;SwitchB作为备份网关&#xff1b;HostC以SwitchB为默认网关接入Internet&#xff0c;Switc…...

【Python】按升序排列 Excel 工作表

发现按名称对 Excel 工作表进行排序很麻烦&#xff0c;因此创建了一个代码来使用 Python 的 openpyxl 对它们进行排序。 1. 本次创建的代码概述 在GUI中指定一个Excel文件&#xff08;使用Tkinter。这是一个标准模块&#xff0c;因此不需要安装&#xff09;加载Excel文件&…...

定时器TIM HAL库+cubeMX(上)

定时器时钟源APB1 36MHz 一.基本定时器 1.基本框图 2.溢出时间计算 3.配置定时器步骤 TIM_HandleTypeDef g_timx_handle;/* 定时器中断初始化函数 */ void btim_timx_int_init(uint16_t arr, uint16_t psc) {g_timx_handle.Instance TIM6;g_timx_handle.Init.Prescaler p…...

我常用的几个经典Python模块

Python常用的模块非常多&#xff0c;主要分为内置模块和第三方模块两大类&#xff0c;且不同模块应用场景不同又可以分为文本类、数据结构类、数学运算类、文件系统类、爬虫类、网络通讯类等多个类型。 大家常用的内置模块比如&#xff1a;math、re、datetime、urllib、os、ra…...

课堂练习4.4:页式虚存

4-7 课堂练习4.4&#xff1a;页式虚存 缺页异常在 Linux 内核处理中占有非常重要的位置&#xff0c;很多 Linux 特性&#xff0c;如写时复制&#xff0c;页框延迟分配&#xff0c;内存回收中的磁盘和内存交换&#xff0c;都需要借助缺页异常来进行。 本实训分析 Linux 0.11 的…...

javascript实现Stack(栈)数据结构

上一篇文章我们理解了List这种数据结构&#xff0c;知道了它的特点和一些使用场景&#xff0c;这篇文章我们就来看一下栈这种数据结构&#xff0c;这里的栈可不是客栈哦&#xff0c;哈哈 栈其实和List非常像&#xff0c;使用javascript实现都是基于数组来实现 尝试理解Stack …...

Layui深入

1、代码&#xff1a; <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>注册页面</title> <style> .container { max-width: 600px; margin: 0 auto; padding: 20px; …...

网络层--TCP/UDP协议

目录 一、TCP/UDP协议介绍 1、UDP(User Datagram Protocol)--用户数据报协议 1.1 UDP报文格式 1.2 UDP协议的特性 2、TCP(Transmission Control Protocol )--传输控制协议 2.1 TCP报文格式 2.2 TCP协议的特性 2.3 TCP三次握手 2.4 四次挥手 三、TCP和UDP的区别 四、t…...

前端发送请求之参数处理---multipart/form-data与application/x-www-form-urlencoded

Content-Type就是指 HTTP 发送信息至服务器时的内容编码类型&#xff0c;服务器根据编码类型使用特定的解析方式&#xff0c;获取数据流中的数据。 其实前后端发送请求的方式有 text/plain、application/json、application/x-www-form-urlencoded、 multipart/form-data等&…...

解决Ubuntu16.04没声音

第一步&#xff1a;安装 PulseAudio Volum Control Ubuntu没有声音&#xff08;听不到声音&#xff09;的解决方法 第二步&#xff1a;No cards available for configuration 【解决Ubuntu18.04没声音&#xff1a;No cards available for configuration】 完美解决&#xf…...

12.14每日一题(备战蓝桥杯归并排序)

12.14每日一题&#xff08;备战蓝桥杯归并排序&#xff09; 题目 归并排序 给定你一个长度为 n 的整数数列。 请你使用归并排序对这个数列按照从小到大进行排序。 并将排好序的数列按顺序输出。 输入格式 输入共两行&#xff0c;第一行包含整数 n。 第二行包含 n 个整数&…...

面试__Java常见异常有哪些?

java.lang.IllegalAccessError&#xff1a;违法访问错误。当一个应用试图访问、修改某个类的域&#xff08;Field&#xff09;或 者调用其方法&#xff0c;但是又违反域或方法的可见性声明&#xff0c;则抛出该异常。 java.lang.InstantiationError&#xff1a;实例化错误。当…...

linux 网络子系统 摘要

当你输入一个网址并按下回车键的时候&#xff0c;首先&#xff0c;应用层协议对该请求包做了格式定义;紧接着传输层协议加上了双方的端口号&#xff0c;确认了双方通信的应用程序;然后网络协议加上了双方的IP地址&#xff0c;确认了双方的网络位置;最后链路层协议加上了双方的M…...

java发起http、https请求,并携带cookie、header,post参数放body并可选关闭ssl证书验证,高可用版

公司有个需求是发起https请求对接国家数据接口&#xff0c;需要带header、cookie&#xff0c;并关闭ssl证书验证&#xff0c;搜了很多文章&#xff0c;都说用HttpsURLConnection发起请求&#xff0c;但不知为啥在封装body参数的时候一直报400封装出错&#xff0c;也欢迎指出不足…...

windows系统nodeJs报错node-sass npm ERR! command failed

报错信息 npm WARN deprecated request2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142 npm WARN deprecated tar2.2.2: This version of tar is no longer supported, and will not receive security updates. Please upgrade asa…...

从零构建属于自己的GPT系列5:模型部署1(文本生成函数解读、模型本地化部署、文本生成文本网页展示、代码逐行解读)

&#x1f6a9;&#x1f6a9;&#x1f6a9;Hugging Face 实战系列 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在PyCharm中进行 本篇文章配套的代码资源已经上传 从零构建属于自己的GPT系列1&#xff1a;数据预处理 从零构建属于自己的GPT系列2&#xff1a;模型训…...

电脑篇——360浏览器打开新标签页自定义,和关闭360导航(强迫症福音)

1.点击“”按钮打开新标签页时会自动打开“资讯聚合”页面&#xff0c;如下图。 如何让我们打开新标签页可以自定义呢&#xff08;如我这般强迫症必须要新打开的页面干干净净&#xff09;&#xff1f; 方法&#xff1a;点击号打开新标签页后&#xff0c;在新标签页界面上找到…...

SkyWalking 10.2.0 SWCK 配置过程

SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外&#xff0c;K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案&#xff0c;全安装在K8S群集中。 具体可参…...

SciencePlots——绘制论文中的图片

文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了&#xff1a;一行…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器

——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的​​一体化测试平台​​&#xff0c;覆盖应用全生命周期测试需求&#xff0c;主要提供五大核心能力&#xff1a; ​​测试类型​​​​检测目标​​​​关键指标​​功能体验基…...

DAY 47

三、通道注意力 3.1 通道注意力的定义 # 新增&#xff1a;通道注意力模块&#xff08;SE模块&#xff09; class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下&#xff0c;知识图谱凭借其高效的信息组织能力&#xff0c;正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合&#xff0c;探讨知识图谱开发的实现细节&#xff0c;帮助读者掌握该技术栈在实际项目中的落地方法。 …...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)

本文把滑坡位移序列拆开、筛优质因子&#xff0c;再用 CNN-BiLSTM-Attention 来动态预测每个子序列&#xff0c;最后重构出总位移&#xff0c;预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵&#xff08;S…...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

JVM虚拟机:内存结构、垃圾回收、性能优化

1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...

TCP/IP 网络编程 | 服务端 客户端的封装

设计模式 文章目录 设计模式一、socket.h 接口&#xff08;interface&#xff09;二、socket.cpp 实现&#xff08;implementation&#xff09;三、server.cpp 使用封装&#xff08;main 函数&#xff09;四、client.cpp 使用封装&#xff08;main 函数&#xff09;五、退出方法…...

DAY 45 超大力王爱学Python

来自超大力王的友情提示&#xff1a;在用tensordoard的时候一定一定要用绝对位置&#xff0c;例如&#xff1a;tensorboard --logdir"D:\代码\archive (1)\runs\cifar10_mlp_experiment_2" 不然读取不了数据 知识点回顾&#xff1a; tensorboard的发展历史和原理tens…...