出现警告时 pg_restore 的退出代码问题

Posted

技术标签:

【中文标题】出现警告时 pg_restore 的退出代码问题【英文标题】:issue with pg_restore s exit code when warnings are there 【发布时间】:2015-03-17 09:52:57 【问题描述】:

命令:

bin/pg_dump -b -o -Fc -Z 0 -p 5333 -U user template1 -f db.dump
bin/pg_restore -c  -h localhost -p 5333 -U user -d template1 db.dump 

接下来的步骤:

    向数据库添加新表并进行转储

    删除新添加的表

    尝试使用转储文件恢复

    恢复以代码 1 退出,但表仍成功恢复。

pg_restore 中的错误:pg_restore:[archiver (db)] 无法执行查询:err-1:表“test1”不存在 命令是:DROP TABLE public.test1; 警告:还原时忽略错误:2

这是带有表添加/删除步骤的转储/恢复功能的预期行为吗?

【问题讨论】:

尝试从pg_restore 中删除-c (--clean) 选项。如果表不存在,那么-c 产生的尝试DROP TABLE 将导致错误。 【参考方案1】:

如果目标数据库的表仅与转储中的表部分重叠,则使用 pg_restore 可能会让人头疼。

使用--clean 标志只能部分解决问题,但您仍然可能会遇到不存在的表的错误。

在我看来,最好的办法是删除目标数据库(或删除级联目标架构)并进行恢复。

你可能想看看类似的问题:will pg_restore overwrite the existing tables?

【讨论】:

以上是关于出现警告时 pg_restore 的退出代码问题的主要内容,如果未能解决你的问题,请参考以下文章

应用程序自动退出,没有任何警告或错误

Python 子进程——如何忽略退出代码警告?

Xamarin Forms java.exe" 以代码 1 (ProGuard) 退出

我可以让 SQL*Plus 在函数编译失败时退出并出现错误吗?

如果引发编译时警告,是不是可以让编译器提前退出,构建失败?

PgSql备份pg_dump与还原手记pg_restore