问题来源

在系统使用过程中出现了一个报错信息

错误:more than one owned sequence found (找到多个拥有的序列)

排查得知是数据库在迁移时生成了多个序列导致,如下图

现在数据库中基本每个序列都有三个

解决办法

背景介绍完毕,接下来开始删掉多余的序列

执行代码得到序列的删除语句

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


新建.sql文件,将语句复制到文件中
然后执行sql文件,选中“遇到错误时继续”

这里删掉的92个就是重复的序列,留下了54个序列

但是剩下的序列名都是以1或2结尾,我们把序列名进行一个修改

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

至此,序列重复的问题就解决了
但是,因为序列混乱,而且在发现问题之前有些错误序列已经生成过数据。
导致现在有部分表的序列值比实际值小,插入数据时发生了主键冲突。
需要将序列的值更新为对应表的最大值

复制下面sql执行结果的第一列,然后执行sql

select ( E'SELECT setval(\''||b.sequence_name||E'\', (select COALESCE(max('|| pg_attribute.attname || '),1) from '||pg_class.relname||'), true);'),pg_class.relname, pg_constraint.conname as pk_name,pg_attribute.attname as colname,pg_type.typname as typename  from
pg_constraint  inner join pg_class
on pg_constraint.conrelid = pg_class.oid
inner join pg_attribute on pg_attribute.attrelid = pg_class.oid
and  pg_attribute.attnum = pg_constraint.conkey[1]
inner join pg_type on pg_type.oid = pg_attribute.atttypid
RIGHT JOIN (select seq_ns.nspname as sequence_schema, seq.relname as sequence_name,tab_ns.nspname as table_schema,tab.relname as related_table
from pg_class seqjoin pg_namespace seq_ns on seq.relnamespace = seq_ns.oidJOIN pg_depend d ON d.objid = seq.oid JOIN pg_class tab ON d.objid = seq.oid AND d.refobjid = tab.oidJOIN pg_namespace tab_ns on tab.relnamespace = tab_ns.oid
where seq.relkind = 'S' and seq_ns.nspname = 'public') b on related_table=pg_class.relname
where
-- pg_class.relname is null
pg_constraint.contype = 'p'


执行SQL,问题解决

解决postgresql序列重复的问题相关推荐

  1. 解析postgresql 删除重复数据案例

    这篇文章主要介绍了postgresql 删除重复数据案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下 1.建表 /*Navicat Premium ...

  2. 简单介绍redis分布式锁解决表单重复提交的问题

    在系统中,有些接口如果重复提交,可能会造成脏数据或者其他的严重的问题,所以我们一般会对与数据库有交互的接口进行重复处理.本文就详细的介绍一下redis分布式锁解决表单重复提交,感兴趣的可以了解一下 假 ...

  3. 解决postgresql数据库localhost可以连接,ip连接不了的问题

    解决postgresql数据库localhost可以连接,ip连接不了的问题 参考文章: (1)解决postgresql数据库localhost可以连接,ip连接不了的问题 (2)https://ww ...

  4. 插入,在PostgreSQL中重复更新吗?

    本文翻译自:Insert, on duplicate update in PostgreSQL? Several months ago I learned from an answer on Stac ...

  5. 如何解决头文件重复包含和宏的重复定义问题:用#ifndef 、#define、#endif

    如何解决头文件重复含问题 #ifndef .#define.#endif的作用是: (1)防止宏的重复定义 (2)防止有文件的重复包含 #ifndef _A_H_ #define _A_H_ .... ...

  6. php 计算字符串相邻最大重复数_php如何解决字符串中重复字符的次数并且排序输出的方法...

    在php开发中有这样的需求.在指定的字符串中提取出每个单位字符出现的次数,并且倒序排序,截取前4个.留作使用.刚拿到这个需求的时候,我想了想,难道要把每个字符全部切割出来之后,一一的比对计算出相应的出 ...

  7. php重复点击按钮无效,完美解决UIButton按钮重复点击、多次响应的问题

    最近测试老跑过来提bug,说按钮可以点好几次,然后蹦出来好几个一样的界面出来,解决了一个地方,其他地方也会冒出一样的问题来,仔细一想,还是要从根本上解决问题,于是想了几个方法: 1.添加UIButto ...

  8. postgres 禁止远程登录_解决postgresql无法远程访问的情况

    今天刚入手这个数据库玩玩,发现无法通过IP去访问数据库,后面查询原因为,该数据库默认只能通过本地连接,也就是回环地址(127.0.0.1) 解决方案: 1.修改安装目录下的data\pg_hba.co ...

  9. 猜字母 把abcd...s共19个字母组成的序列重复拼接106次,得到长度为2014的串。

    package org.bluebridge.topics;/*猜字母把abcd...s共19个字母组成的序列重复拼接106次,得到长度为2014的串.接下来删除第1个字母(即开头的字母a),以及第3 ...

最新文章

  1. Cisco ACL 一例
  2. delphi usb 读写_写作论语 | 崔嵘:写我所读——国外整本书阅读中读写结合的理论与实践(上)...
  3. Linux 操作系统原理 — loop 伪设备
  4. py2neo 基本用法
  5. python打印网页成pdf_vue中将网页打印成pdf
  6. mysql 二叉树表设计_mysql---B+tree索引的设计原理
  7. 机器学习 Machine Learning- 吴恩达Andrew Ng 第6~10课总结
  8. java基于Springboot+vue的鲜花销售商城网站
  9. [python]python生成md5
  10. 疫情可视化--2.爬虫--百度迁徙的疫情数据(各省市各个时间段迁入迁出比例)
  11. Android 获取文件后缀名
  12. HTML-----超链接与表格Lable(详细可看)
  13. Linux解决中文乱码问题及LANG与NLS_LANG的区别
  14. Light OJ 1197
  15. 只需要一招,改变你的网易云皮肤(仅限于PC端)
  16. Springboot毕设项目健康在线服务平台26iy0(java+VUE+Mybatis+Maven+Mysql)
  17. 图难于其易,为大于其细。天下难事,必作于易;天下大事,必作于细--《道德经》...
  18. 推荐 8 个优质的公众号
  19. jquery的$().each(function(i){})和和$.each(,function(i,n){})的区别和用法
  20. ThinkSNS团队衍生产品你知道几个?

热门文章

  1. 据说Jumony Parser是目前对HTML规范支持最好的HTML Parser
  2. 阿里、京东跟进拼购,可能误中拼多多的圈套
  3. 凯撒(Caesar)加密解密算法C/C++实现
  4. DH LEE 精彩平面设计作品欣赏
  5. 单细胞测序之在脑科学方面的应用
  6. 3S技术在战疫中的应用
  7. HDU之小小作者-----Mer de sause;
  8. Linux相关概念以及相关命令
  9. python定义函数后怎么输出_python中如何定义函数返回值
  10. Android管理WIFI