【问题标题】:pg_restore for 9.4 fails with error 'could not execute query'9.4 的 pg_restore 失败并出现错误“无法执行查询”
【发布时间】:2021-05-11 04:30:33
【问题描述】:

我要恢复的 PostgreSQL 版本是 9.4.10。我从同一版本备份了一个数据库。我用于恢复的命令是:

/opt/PostgreSQL/9.4/bin/pg_restore -U postgres --port=5432 -v --dbname=mydb < /backups/309646/WAL/pipe_309646

我得到的错误是:

pg_restore: executing BLOB 71197
pg_restore: [archiver (db)] Error from TOC entry 3822; 2613 71197 BLOB 71197 user
pg_restore: [archiver (db)] could not execute query: ERROR:  duplicate key value violates unique constraint "pg_largeobject_metadata_oid_index"
DETAIL:  Key (oid)=(71197) already exists.
    Command was: SELECT pg_catalog.lo_create('71197');

这在 pg 错误中重复了大约 112 次。我需要恢复到同一个数据库。这是我用于转储的命令:

/opt/PostgreSQL/9.4/bin/pg_dump" -U postgres -Fc -b  --port=5432  'mydb' -t public.users > /backups/309646/WAL/pipe_309646

任何迹象表明为什么会发生这种情况?如何缓解此错误?

【问题讨论】:

    标签: postgresql database-administration pg-restore


    【解决方案1】:

    您正在尝试将大对象恢复到已包含具有相同oid 的大对象的数据库中。

    使用尚未包含任何大对象的新数据库作为还原目标。

    或者,先用

    删除大对象
    SELECT lo_unlink(oid) FROM pg_largeobject_metadata;
    

    【讨论】:

    • 有没有办法在恢复之前强制一个新的 oid 或删除现有的 oid?我需要使用相同的数据库。我已将转储命令添加到问题中。
    • 您可以先删除我扩展答案中的所有大对象。
    猜你喜欢
    • 2022-07-18
    • 2020-08-03
    • 2013-09-17
    • 1970-01-01
    • 2021-04-24
    • 2019-08-17
    • 2018-02-10
    • 2017-06-21
    • 2021-02-07
    相关资源
    最近更新 更多