Postgres 9.3备份和恢复错误

3

我用“pg_dump”工具备份了我的数据库(备份文件名为“testbackup.sql”)。在恢复它之前,我删除了我创建的所有表、视图、序列和函数。之后使用“psql”命令尝试还原转储。但是它显示了重复键违反错误。

错误: psql.bin:testbackup.sql:17884: 错误: 违反唯一约束条件“pg_largeobject_metadata_oid_index”的重复键值。

** 我在互联网上搜索了一下,但没有找到正确的解决方案。请提供正确的解决方案。

2个回答

1
更明确地回答这个问题-执行以下查询以清除大对象(LOs):
SELECT lo_unlink(loid) FROM pg_largeobject;

在某些环境下,您可能无法执行此操作,并会收到以下错误信息:

ERROR: permission denied for table pg_largeobject

CONTEXT: SQL statement "SELECT lo_unlink(loid) FROM pg_largeobject"

那么一个解决方法是改为执行以下操作:
SELECT lo_unlink(oid) FROM pg_largeobject_metadata;

您可能仍会遇到以下形式的错误...

错误:大对象123456789不存在

...这意味着您的数据库包含未引用的大对象。

可以使用PostgreSQL的vacuumlo实用程序(不是SQL查询)来清除这些对象:

vacuumlo [DATABASE]

1

看起来您忘记删除所有大对象了。通过在pg_largeobject中检查它们的ID,并使用lo_unlink进行删除。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接