postgresql序列重复问题处理

问题,postgresql,序列,重复 · 浏览次数 : 112

小编点评

**错误原因:** ```sql more than one owned sequence found ``` **解决方案:** 1. **查看序列**:使用 `SELECT relname FROM pg_class WHERE relkind ='S'` 语句查看所有序列的名称,并检查序列中是否存在重复名称。 2. **执行删除语句**:遍历结果,针对每个重复的序列,执行 `DROP SEQUENCE ...` 语句删除该序列。 3. **按照文章中方法更新序列名称**:执行 `UPDATE pg_class SET relname = substr(relname,0,char_length(relname)) WHERE relname like '%seq_%'` 语句,其中 `%seq_%` 代表匹配的数字部分。 **示例代码:** ```sql -- 查看重复序列 SELECT relname FROM pg_class WHERE relkind ='S'ORDER BY c.relname; -- 执行删除语句 -- 循环遍历结果,删除每个重复序列 -- ... -- 更新序列名称 UPDATE pg_class SET relname = substr(relname,0,char_length(relname)) WHERE relname like '%seq_%'`; ``` **注意:** * 确保在执行删除语句之前备份所有数据。 * 使用 `pg_class` 表的 `relname` 列作为删除条件。 * 此代码假设您已在其他地方创建了所有序列。

正文

问题

在执行数据插入时,postgresql 提示more than one owned sequence found错误。这个和之前文章中写的序列编号错乱不同,是由数据表的一个列生成了多个序列导致的。(常见于两个数据库的拷贝、同步等操作)。

如果查看序列,会发现序列中有很多重复的项目,可以执行语句:

SELECT 'DROP SEQUENCE "'||c.relname||'";' FROM pg_class c WHERE c.relkind ='S'
ORDER BY c.relname

生成删除每一个序列的语句。接下来需要然后复制出来执行,记得选择遇到错误继续,这样就可以删除所有多余的序列。然后按照我之前文章写的批量更新序列就可以了。如果是强迫症的话,可以使用:

 UPDATE pg_class SET relname = substr(relname,0,char_length(relname)) WHERE relname like '%seq_'

将名字后面多余的 1、2 之类的数字去掉。

参考

与postgresql序列重复问题处理相似的内容:

postgresql序列重复问题处理

## 问题 在执行数据插入时,postgresql 提示*more than one owned sequence found*错误。这个和之前文章中写的[序列编号错乱](https://www.cnblogs.com/podolski/p/17349217.html)不同,是由数据表的一个列生成了

批量更新Postgresql的序列

序列(sequence)是 PostgreSQL 中的一种对象,用于生成自动递增的唯一标识符。通常,序列会与表的自增主键一起使用,以确保每个新插入的行都有一个唯一的标识符。在某些情况下,可能需要更新序列的值: 从另一个数据库中导入数据,自增列的值也从原来的数据中导入。导入的过程中,目标数据库的序列不

[转帖]pgbench 使用介绍及示例

pgbench 使用介绍及示例 https://www.cnblogs.com/cqdba/ 1.pgbench概要 pgbench是一种在PostgreSQL上运行基准测试的简单程序, 它是pg自带的工具; 它可能在并发的数据库会话中一遍一遍地运行相同序列的 SQL 命令,并且计算平均事务率(每秒

[转帖]postgresql 编译选项 --with-uuid=e2fs、--with-uuid=ossp 的理解

postgresql 的 rpm 包使用的是 ‘–with-uuid=e2fs’ postgresql 源码 configure 的帮助选项有 uuid 的几个选项,有啥区别? # ./configure --help --with-uuid=LIB build contrib/uuid-ossp

[转帖]postgresql日志参数

https://www.jianshu.com/p/407c03aaa600 postgresql日志参数 logging_collector:这个参数启用日志收集器,它是一个捕捉被发送到stderr的日志消息的后台进程,并且它会将这些消息重定向到日志文件中;默认是OFF,修改参数需要重启。 log

[转帖]postgresql 的 pg_hba.conf 的行记录顺序

postgresql: 9.6 一直觉得 pg_hba.conf 的行记录与顺序无关,遵循细化优先的规则。今天在回顾 pg_hba.conf 文档时发现这种认识是错的。 下面这段话是从文档拷贝过来的: 因为每一次连接尝试都会顺序地检查pg_hba.conf记录,所以这些记录的顺序是非常关键的。通常,

[转帖]postgresql 的 .pgpass密码文件的使用

.pgpass 是 连接 postgresql 时使用的密码文件,通常位置为 ~/.pgpass。 在使用某些组件时还真的必须使用。具体的格式为: hostname:port:database:username:password 常见的使用如下: # su - postgres $ vi ~/.pg

[转帖]PostgreSQL进程结构

http://www.pgsql.tech/article_101_10000099 1、简介 本文简单的介绍了 PostgreSQL 的主要进程类型与功能。 2、PostgreSQL进程分为主进程与辅助进程。 2.1、主进程: PostMaster进程是整个数据库实例的总控进程,负责启动关闭该数据

[转帖]PostgreSQL与MySQL 分析对比

http://www.pgsql.tech/article_101_10000079 概述 在几个流行的数据库中,我首先接触到的是MySQL,随着工作发展,接触到越来越多的是PostgreSQL数据库。这两个十分流行的开源数据库。在这之后,我就会经常和一些朋友进行讨论:MySQL和PostgreSQ

[转帖]PostgreSQL的MVCC vs InnoDB的MVCC

任何一个数据库最主要功能之一是可扩展。如果不删除彼此,则尽可能较少锁竞争从而达到这个目的。由于read、write、update、delete是数据库中最主要且频繁进行的操作,所以并发执行这些操作时不被阻塞则显得非常重要。为了达到这种目的,大部分数据库使用多版本并发控制(Multi-Version