寻求pg_restore写入日志文件方案:解决-d与-f参数冲突问题
pg_restore -d与-f参数冲突的解决办法
问题原因
pg_restore的-d(指定目标数据库并直接执行恢复)和-f(将恢复SQL输出到文件)是互斥参数,工具不允许同时使用——要么直接执行恢复,要么生成SQL脚本,无法同时进行这两个操作。
解决办法
根据你的需求选择对应的方案:
方案1:直接恢复数据库并记录日志
如果你的目标是直接恢复数据库,同时把恢复过程的日志保存到文件,不要用-f参数,改用系统的输出重定向功能:
pg_restore -d mydb -h myhost --clean --verbose "c:\dba\Manager\tk\Tasks\import-tk-21aug2022\budget-app-sara-21.8_updated_withdata" > "c:\dba\manager\tk\restore-tk-21aug2022.log" 2>&1
>表示把命令的标准输出(包括--verbose的详细信息)写入日志文件2>&1表示把错误输出也合并到标准输出中,确保所有日志(包括错误信息)都能被记录
方案2:先生成恢复SQL脚本,再执行并记录日志
如果你的目标是先导出恢复用的SQL脚本,之后再执行,则去掉-d参数,用-f生成脚本:
pg_restore -h myhost --clean --verbose "c:\dba\Manager\tk\Tasks\import-tk-21aug2022\budget-app-sara-21.8_updated_withdata" -f "c:\dba\manager\tk\restore-tk-21aug2022.sql"
之后用psql执行脚本并记录日志:
psql -d mydb -h myhost -f "c:\dba\manager\tk\restore-tk-21aug2022.sql" > "c:\dba\manager\tk\restore-tk-21aug2022.log" 2>&1
内容的提问来源于stack exchange,提问作者meirben
相关产品推荐
相关产品推荐

