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

如何从PostgreSQL的dump文件中恢复指定Schema?

解决方案

错误原因

你用pg_dump默认生成的是纯文本格式的备份文件,而pg_restore仅支持PostgreSQL的自定义格式(-Fc)、目录格式(-Fd)或tar格式(-Ft)备份,因此会报错提示你使用psql处理文本格式备份。


方案1:直接用现有文本备份恢复Schema A

通过psql结合文本过滤工具提取Schema A的相关SQL语句进行恢复,适合不想重新备份的场景:

# 筛选Schema A的对象定义与数据,导入目标库
psql -U postgres -p 5440 -d MYPRODDB -v ON_ERROR_STOP=1 < <(grep -E '^(CREATE|ALTER|DROP|GRANT|REVOKE|INSERT|UPDATE|DELETE).*[[:space:]]A\.' MYPRODDB_2022.dmp)

注意:这种方法可能遗漏跨行的SQL代码(比如函数、存储过程的定义),如果恢复过程中出现语法错误,建议用方案2重新备份。


方案2:重新生成Schema A的专属备份(更可靠)

直接用pg_dump指定仅备份Schema A,生成的备份文件更精准,恢复也更稳定:

步骤1:生成Schema A的文本格式备份

pg_dump -U postgres -p 5440 -n A MYPRODDB > MYPRODDB_SCHEMA_A.dmp

步骤2:用psql恢复到目标库

psql -U postgres -p 5440 -d MYPRODDB < MYPRODDB_SCHEMA_A.dmp

如果需要后续灵活恢复(比如只恢复部分对象),可以生成自定义格式备份:

# 生成自定义格式备份
pg_dump -U postgres -p 5440 -Fc -n A MYPRODDB > MYPRODDB_SCHEMA_A_custom.dmp

# 用pg_restore恢复
pg_restore -U postgres -p 5440 -d MYPRODDB -n A MYPRODDB_SCHEMA_A_custom.dmp

额外注意事项

  • 恢复前请确保目标数据库中Schema A不存在,或已清理该Schema下的所有旧对象,避免冲突。
  • 如果仅需恢复Schema结构(不含数据),在pg_dump时添加-s参数。
  • 处理大文件时,可在psql命令中添加--single-transaction参数,保证恢复操作的原子性(要么全部成功,要么全部回滚)。

内容的提问来源于stack exchange,提问作者postgresnewbie

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 10:10:33