postgresql序列重复问题处理
问题
在执行数据插入时,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 之类的数字去掉。