postgresql序列重复问题处理

寻技术 PostgreSQL 2023年11月29日 127

问题

在执行数据插入时,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序列重复的问题_more than one owned sequence found_witleo灬的博客-CSDN博客
  • Value Generation | Npgsql Documentation
关闭

用微信“扫一扫”