PowerShell调用pg_restore仅返回$null,如何获取其返回码?
PostgreSQL pg_restore 获取返回码实现自动化恢复判断
在PowerShell中执行外部命令时,&运算符默认仅捕获命令的标准输出流(stdout)内容,而pg_restore的错误信息会输出到标准错误流(stderr),这就是你拿到$null的原因。要判断恢复是否成功,关键是获取命令的返回码,PowerShell会将外部命令的退出码存储在自动变量$LASTEXITCODE中。
解决步骤:
- 执行
pg_restore命令后,立即读取$LASTEXITCODE变量:0表示执行成功,非0值表示执行失败。 - 如果需要捕获错误输出内容,可以将stderr重定向到stdout(用
2>&1参数),这样就能把所有输出存入变量。
示例脚本:
# 执行pg_restore命令 & "C:\Program Files\PostgreSQL\16\bin\pg_restore.exe" --clean --dbname=postgresql://:@localhost:/<target_database> $DB_Filename # 获取返回码 $restoreExitCode = $LASTEXITCODE # 根据返回码判断结果 if ($restoreExitCode -eq 0) { Write-Host "数据库恢复完成" } else { Write-Host "数据库恢复失败,返回码: $restoreExitCode" # 若需要捕获错误信息,可改用以下执行方式: # $allOutput = & "C:\Program Files\PostgreSQL\16\bin\pg_restore.exe" --clean --dbname=postgresql://:@localhost:/<target_database> $DB_Filename 2>&1 # Write-Host "错误详情: $allOutput" }
补充说明:
pg_restore的非0返回码对应不同错误场景:比如文件不存在、数据库连接失败、权限不足、备份文件损坏等,你可以结合返回码和捕获到的错误输出做进一步的问题排查。
内容的提问来源于stack exchange,提问作者kking85743
相关产品推荐
相关产品推荐

