PostgreSQL 修改序列

devtools/2024/11/14 15:08:00/

ALTER SEQUENCE public.pitr_test_id_seq CACHE XXXXX;
SELECT nextval('pitr_test_id_seq');
SELECT setval('pitr_test_id_seq', 42);            下一次 nextval 会返回 43
SELECT setval('pitr_test_id_seq', 42, true);     同上
SELECT setval('pitr_test_id_seq', 42, false);    下一次 nextval 将返回 42

currval(pitr_test_id_seq)    返回最近一次用 nextval 获取的指定序列的值
lastval()    返回最近一次用 nextval 获取的任何序列的值
nextval(pitr_test_id_seq)    递增序列并返回新值
setval(pitr_test_id_seq, bigint)    设置序列的当前值
setval(pitr_test_id_seq, bigint, boolean)    设置序列的当前值以及 is_called 标志

备注:这里 CACHE 如果过大会造成表类似锁表状态,但是和锁表又有非常大的区别。遇到问题的时候就算重启服务都无法解决。
有一次我们一个研发写了一个 ALTER SEQUENCE public.xxx_seq CACHE 1731506966603517955;
最后问题还是通过解析日志才找到的。然后再通过模拟多个 SESSION 进行请求。

这里的 cache 是这个意思,一次性预先分配指定数量的序列值,然后将其存储在内存中,以便能尽快被会话使用。
The clause CACHE cache enables sequence numbers to be preallocated and stored in memory for faster access.

这里进程还不能通过调用 pg_terminate_backend 来实现关闭进程的操作。

单独执行语句 ALTER SEQUENCE public.pitr_test_id_seq CACHE XXXXX; 不会有问题,但是在执行完这个语句之后,使用 select nextval('pitr_test_id_seq'); 来获取序列的下一个键值无法被运行,会一直处于等待的状态。还是需要从操作系统的层面进行 kill -9 select nextval('pitr_test_id_seq'); 进程的 PID,然后再执行 ALTER SEQUENCE public.pitr_test_id_seq CACHE 1;  这里的 CACHE 的值就是 1。


http://www.ppmy.cn/devtools/133948.html

相关文章

MySQL技巧之跨服务器数据查询:基础篇-A数据库与B数据库查询合并--封装到存储过程中

MySQL技巧之跨服务器数据查询:基础篇-A数据库与B数据库查询合并–封装到存储过程中 我们的最终目的是什么?当然的自动执行这些合并操作! 上一篇 MySQL技巧之跨服务器数据查询:基础篇-A数据库与B数据库查询合并 我们已经知道怎么合…

Java反序列化之CommonsCollections4、5、7 链的学习

一、前言 前面的文章中,基本把CC链的关键部分学习的差不多了,利用过程也是比较清晰了,接下来把 CommonsCollections 4、5、7 利用链学习下,扩展下思路 二、CommonsCollections4 利用链的学习 运行环境: java 1.8.0_71…

C++20新特性的补充讲解

C20 标志着 C 语言的一次重要更新,除了 Concepts、Ranges、协程等被广泛讨论的特性外,还有许多值得注意的改进。本文将详细探讨其他一些核心新特性,包括 constexpr 扩展、新增的 std::format、std::span、std::bit 操作、原子智能指针、char8…

DAY111PHP开发框架THIKNPHP反序列化POP利用链RCE执行文件删除

一、文件删除利用链分析 1、__destruct发现调用$this->removeFiles(); 2、removeFiles();函数方法file_exists,unlink($filename);文件删除功能 3、unserialize(base64_decode($_GET[id])); 有可控变量 4、pop文件删除利用链的使用 只有在这个类中调用 Files可…

通过C++跨平台的预编译宏来区分不同的操作系统:Win32/Win64/Unix/Linux/MacOS

因为 C 具有跨平台的特性,所以有些需求一套代码就多端使用,比如我最近在学习的 OpenGL ES。 但是,不同平台还是具有一定差异性,所以我们首先得判断出是什么平台? 比如 iOS 系统和 Android 系统。 那么如何判断呢&…

Springboot -- 自定义异常,异常处理

定义异常类 package com.shore.my_spring_demo.exception;import com.shore.my_spring_demo.common.enums.ErrorEnums; import lombok.Data; import lombok.EqualsAndHashCode;Data EqualsAndHashCode(callSuper false) public class UsersException extends RuntimeExceptio…

GitHub 上的开源项目推荐

GitHub 上的开源项目有成千上万,涵盖了从前端框架到数据科学、机器学习、系统工具等各个领域。不同的人根据兴趣和需求,可能会有不同的排名。不过,一些开源项目因为其广泛的应用、社区支持和技术创新,通常被认为是“最好”的开源项…

AUTOSAR CP Ethernet State Manager(EthSM)规范的主要功能以及工作原理导读

AUTOSAR Ethernet State Manager(以下简称EthSM)规范的主要功能 AUTOSAR Ethernet State Manager(以下简称EthSM)规范的主要功能包括: 通信控制 网络模式管理:为通信管理器(ComM)提供API,用于请求以太网网络的通信模式,如ETHSM_FULL_COMMUNICATION(全通信)、ETHSM_…