首页 > 数据库 >PostgreSQL 序列(Sequence)

PostgreSQL 序列(Sequence)

时间:2023-11-05 11:00:24浏览次数:34  
标签:PostgreSQL seq Sequence -- linq 序列 serial id

基本操作

--新增序列
CREATE SEQUENCE xxx_id_seq INCREMENT 1 -- 一次加多少 MINVALUE 1 -- 最小值 START 1 --从多少开始 CACHE 1 CYCLE;

--指定表使用
alter table xxx_table alter column id set DEFAULT nextval('xxx_id_seq')

--查询序列
SELECT nextval('xxx_id_seq');

--删除序列
DROP SEQUENCE xxx_id_seq;

--重置序列
alter sequence xxx_id_seq restart with 1

--修改序列(修改序列的最小值和最大值)
ALTER SEQUENCE sequence_name MINVALUE new_min_value MAXVALUE new_max_value;

serial数据类型

在 PostgreSQL 中,serial 是一种特殊的数据类型,用于自动生成唯一标识符(通常用作自增主键)的列。
serial 数据类型是一个伪类型,实际上是由以下两个类型组成:

  • integer:用于存储自增的数值。
  • sequence:用于生成唯一的数值序列。

当你在表中定义了一个列为 serial 类型时,它将自动创建一个与该列关联的序列,并将默认值设为从该序列中获取的下一个值。每次插入新行时,这个序列会自动递增。

CREATE TABLE example_table (
    id serial PRIMARY KEY,
    name text
);

虽然 serial 类型是一种方便的方式来创建自增主键列,但实际上它只是一种语法糖,底层仍然使用了 integer 类型和序列。因此,你也可以手动创建一个 integer 类型的列,并使用序列来生成唯一的值。

序列溢出解决方案

方法1:主键序列 int4 修改为 int8

--创建表
CREATE TABLE "linq_test" (
  "linq_test_id" serial NOT NULL ,
  "merchant_id" int4 NOT NULL,
  "sop_task_id" int4 NOT NULL
)
--主键修改为int8
alter table linq_test alter linq_test_id type bigint;
--修改序列类型,重置最大值
ALTER SEQUENCE "linq_test_linq_test_id_seq" AS bigint MAXVALUE 9223372036854775807;

方法2:重置序列

重置前

重置后

新插入数据

如何提前排查序列溢出

--last_value 接近 max_value,表示序列快用完了 
SELECT * FROM pg_sequences where last_value is not null 
order by last_value  desc;

标签:PostgreSQL,seq,Sequence,--,linq,序列,serial,id
From: https://www.cnblogs.com/lgxlsm/p/17810316.html

相关文章

  • XStream反序列化漏洞原理分析
    一、XStream简介0x1:XStream介绍Xstream是一种OXMapping技术,是用来处理XML文件序列化的框架,在将JavaBean序列化,或将XML文件反序列化的时候,不需要其它辅助类和映射文件,使得XML序列化不再繁索。Xstream也可以将JavaBean序列化成Json或反序列化,使用非常方便。使用方便-XStream......
  • [ARC104F] Visibility Sequence 题解
    题意对于一个长度为\(N\)的序列\(H\),可以通过如下方式构造一个序列\(P\):若存在\(j\in\left[1,i\right)\),使得\(H_j>H_i\),则\(P_i=\max\limits_{j\in\left[1,i\right)\landH_j>H_i}j\),否则\(P_i=-1\)。给定一个长度为\(N\)的序列\(X\),求所有满足如......
  • 使用C++实现Range序列生成器
    在C++编程中,经常需要迭代一系列数字或其他可迭代对象。通常,这需要编写复杂的循环结构,但有一种精妙的方法可以使这一过程变得更加简单和可读。如果你使用过Python语言那么一定对Range语句非常的数据,我们可以使用C++来实现一个简单的Range封装,如下代码定义了一个名为Range的命名空间......
  • 使用C++实现Range序列生成器
    在C++编程中,经常需要迭代一系列数字或其他可迭代对象。通常,这需要编写复杂的循环结构,但有一种精妙的方法可以使这一过程变得更加简单和可读。如果你使用过Python语言那么一定对Range语句非常的数据,我们可以使用C++来实现一个简单的Range封装,如下代码定义了一个名为Range的命名空间,......
  • Ubuntu 20↑ 安装postgresql,并且开远程访问。
    postgresql-16安装并且开放外网访问按照官方的教程,我已经将pg官方的地址换成了清华开源镜像站的地址,这样下载的速度更快。安装postgresql下载的源sudosh-c'echo"debhttps://mirrors-i.tuna.tsinghua.edu.cn/postgresql/repos/apt/$(lsb_release-cs)-pgdgmain">/et......
  • Kafka反序列化RCE漏洞(CVE-2023-34040)
    漏洞描述SpringKafka是SpringFramework生态系统中的一个模块,用于简化在Spring应用程序中集成ApacheKafka的过程,记录(record)指Kafka消息中的一条记录。受影响版本中默认未对记录配置 ErrorHandlingDeserializer,当用户将容器属性 checkDeserExWhenKeyNull 或 chec......
  • python 自定义序列化器
    @Serialization是一个自定义装饰器,通常用于序列化Python对象。使用@Serialization装饰器可以将一个类转换为可序列化的对象,这样就可以将其存储到文件或通过网络传输。下面是一个使用@Serialization装饰器的示例:importjsondefSerialization(cls):defserialize(......
  • PostgreSQL坏块问题
    问题概述应用在做查询操作时报错ERROR:invalidmemoryallocrequestsize18446744073709551613问题原因数据中有物理坏块解决方案删除损坏的行1.创建扩展createextensionhstore;2.创建functionCREATEORREPLACEFUNCTIONfind_bad_row(tableNameTEXT)RETURNStidas......
  • PostgreSQL技术大讲堂 - 第32讲:数据库参数调整
     PostgreSQL从小白到专家,是从入门逐渐能力提升的一个系列教程,内容包括对PG基础的认知、包括安装使用、包括角色权限、包括维护管理、、等内容,希望对热爱PG、学习PG的同学们有帮助,欢迎持续关注CUUGPG技术大讲堂。 第32讲:数据库参数调整 第32讲:11月04日(周六)19:30-20:30,......
  • [ARC104B] DNA Sequence 题解
    题意对于一个只含有A,C,T,G的字符串\(s\),定义其为匹配的当且仅当其中A的数量和T的数量相等,C的数量和G的数量相等。给定一个长度为\(N\)的字符串\(S\),求其有多少个非空子串是匹配的。\(1\leN\le5000\)。题解\(\mathcal{O}(N)\)做法。首先考虑如果字符集只有......