pg_dump输出包含重复项

时间:2013-03-29 08:24:54

标签: postgresql pg-dump

我在数据库上运行pg_dump,并使用pg_restore恢复到一个新的,完全空的数据库,我收到一个错误:

pg_restore: [archiver (db)] could not execute query: ERROR:  could not create unique index "bibleverses_userversestatus_pkey"
DETAIL:  Table contains duplicated values.

将表检查为已恢复显示重复的主键值,这将阻止创建索引。

然而,检查pg_dump来自的原始数据库并没有显示这个重复的行 - 一切都是应该的(并且必须是,因为约束)。

如何发生这种情况,以及如何解决?

(这是一个持久性错误,而不是一个关闭 - 运行pg_dump再次无法修复它。)

编辑:对不起,简单忘了版本信息:pg_dump / postgres 8.3.11,pg_restore 9.1.6

2 个答案:

答案 0 :(得分:0)

首先要弄明白这一点,你将不得不花一些时间处理转储文件并找出发生了什么。我的直接猜测是,两个备份可能会连接在一起。但这里有待观察的内容:

  1. 给定表的COPY或INSERT语句是否多次出现?

  2. 您是否可以证明在给定的COPY或INSERT运行中数据是否重复?

  3. 你能同时使用--inserts和没有吗?

  4. 如果您可以证明它不是通过将备份连接在一起引起的,那么我建议在这一步两步:

    1. 将PostgreSQL升级到最新的9.1,再次测试,如果它仍然发生

    2. 写一个详细的案例并跟进pgsql-bugs电子邮件列表。

    3. 我敢打赌钱就像备份连在一起但我不能排除基于斯巴达的结论可能存在错误。

答案 1 :(得分:0)

在还原psql期间,必须撤消与该数据库的所有会话,否则将产生重复的条目问题

从特定数据库撤消会话的命令:

SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE  pid <> pg_backend_pid() AND datname = 'db_name' ;