You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求与指定pg_restore命令等效的psql恢复命令(仅用.sql文件)

等效于指定pg_restore命令的psql恢复方案

嘿,我懂你这种抓瞎的感觉——手里只有.sql导出文件,pg_restore根本用不了,查了一堆方法还都不对症。别慌,我帮你把那条pg_restore命令转换成完全等效的psql命令行操作,完美匹配所有参数的行为:

核心等效命令

psql -v ON_ERROR_STOP=1 --verbose -h localhost -U myuser -d my_db \
  --set=SESSION_REPLICATION_ROLE=replica \
  -f db/latest.sql

参数对应说明

我给你拆解下每个部分对应原来pg_restore参数的作用:

  • --verbose:和pg_restore的--verbose完全一致,输出详细的执行日志,方便你跟踪恢复进度
  • -h localhost -U myuser -d my_db:连接参数和原命令完全匹配,指定数据库主机、登录用户和目标数据库
  • --set=SESSION_REPLICATION_ROLE=replica:这个参数是关键!它会让PostgreSQL自动忽略备份文件中的**所有权限设置(GRANT/REVOKE)和对象所有者变更(ALTER OWNER)**语句,正好对应pg_restore的--no-acl和--no-owner参数
  • -v ON_ERROR_STOP=1:这是个实用的附加参数,遇到错误就立即停止执行,避免部分恢复导致的数据库不一致,和pg_restore的默认容错逻辑对齐
  • -f db/latest.sql:指定要执行的SQL备份文件路径,替代原命令中的dump文件

关于--clean参数的处理

原pg_restore命令中的--clean是恢复前删除数据库中已存在的同名对象,这部分需要分两种情况:

  • 如果你的.sql文件是用pg_dump --clean导出的:那文件里已经包含了恢复前删除对象的DROP IF EXISTS语句,直接执行上面的核心命令就好,效果和pg_restore的--clean完全一致
  • 如果你的.sql文件没有包含清理语句:可以先执行下面的命令清空目标数据库的public schema(如果有其他schema需要调整命令),再执行恢复:
psql -h localhost -U myuser -d my_db -c "DROP SCHEMA public CASCADE; CREATE SCHEMA public;"

这样一套操作下来,就和你原来用pg_restore的效果一模一样了!

内容的提问来源于stack exchange,提问作者James Van Leuven

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:40:41