pg_restore toc错误

MAH*_*AHI 23 postgresql pg-dump pg-restore

我正在使用以下语法进行pg_dump和恢复

pg_dump eval --inserts -b -c --encoding UTF8 -Fc -f eval.sql.tar.gz -x -U postgres
createdb -T template0 test -U postgres
pg_restore -d test eval.sql.tar.gz -e -U postgres
Run Code Online (Sandbox Code Playgroud)

转储是成功的,没有错误,但恢复会产生一些错误,我正在使用相同的用户和特权在同一台机器上转储和恢复...

我已尝试过其他格式,普通,焦油,压缩都得到相同的错误..

我的pg版本是8.4.11,psql版本是8.4.11

我不确定是什么造成这些错误..任何人都可以帮助我

 pg_restore: [archiver (db)] Error while PROCESSING TOC:
pg_restore: [archiver (db)] Error from TOC entry 4965; 0 138871 TABLE DATA ir_act_report_xml insigni
pg_restore: [archiver (db)] could not execute query: ERROR:  invalid input syntax for integer: "purchase.order"
LINE 1: ...st for Quotation', 'ir.actions.report.xml', NULL, 'purchase....
                                                             ^
    Command was: INSERT INTO ir_act_report_xml VALUES (350, 'Request for Quotation', 'ir.actions.report.xml', NULL, 'purchase.order', 'purcha...
Run Code Online (Sandbox Code Playgroud)

MAH*_*AHI 28

这样做了

pg_dump database_name -c -Ft -f file_name.tar 

pg_restore -d database_name -c file_name.tar
Run Code Online (Sandbox Code Playgroud)

在此之前,我试图恢复包括-c(干净)

即使-c包含在pg_dump中,它也不会在pg_restore中使用,除非我们说使用...

  • 使用"clean"标志也会导致很多问题,因为在使用新数据库时它会抱怨缺少对象. (7认同)
  • -c标志无效。仍然出现相同的错误:<br/> <code> $ pg_restore -d开发-t集成-c b7c5 pg_restore:[存档(db)]处理目录时出错:pg_restore:[存档(db)] TOC条目210中的错误; 1259 16535表集成u5j7 pg_restore:[存档器(db)]无法执行查询:错误:角色“ u5j7”不存在命令为:ALTER TABLE public.integrations所有者到u5j7;警告:还原时忽略错误:1 (2认同)

Aka*_*shP 16

在我的案例中的解决方案:

pg_restore --verbose --clean --no-acl --no-owner -h localhost -U username -d database_name dump_name.dump
Run Code Online (Sandbox Code Playgroud)

  • 如果要摆脱无用的错误,可以使用--if-exists方便。https://www.postgresql.org/docs/current/app-pgrestore.html (3认同)