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

如何从--format=c格式的pg_dump备份恢复Schema及其他Schema单表?

能否从该全库备份中选择性恢复Schema和单表?

当然可以。你通过pg_dump生成的是**自定义压缩格式(--format=c)**的全库备份,这种格式支持pg_restore进行精细化的选择性恢复操作,完全能实现恢复一个完整Schema,同时仅恢复另一个Schema中的指定表。

具体操作方法

1. 确认备份中的对象(可选)

如果不确定备份里的对象完整标识,可以先列出备份内容:

pg_restore --list mydb.backup > backup_objects.txt

打开生成的文本文件,就能看到所有对象的路径,比如schema1下的全部对象,以及schema2.table_x这类表条目。

2. 执行选择性恢复

直接用pg_restore的参数组合指定要恢复的对象:

方法一:用--schema和--table直接指定

pg_restore --host "localhost" --port "5432" --username "postgres" --no-password \
--dbname "目标数据库名" --verbose \
--schema "要完整恢复的Schema名" \
--table "另一Schema名.要恢复的表名" \
mydb.backup

提示:如果目标库中还没有对应的Schema,需要先手动创建(CREATE SCHEMA IF NOT EXISTS 你的Schema名;),或者加上--create参数(但会创建整个数据库,需谨慎使用)。

方法二:用--include实现更灵活的匹配

如果需要更精确的控制(比如排除部分子对象),可以用--include参数:

pg_restore --host "localhost" --port "5432" --username "postgres" --no-password \
--dbname "目标数据库名" --verbose \
--include 'schema "要完整恢复的Schema名".*' \
--include 'table "另一Schema名"."要恢复的表名"' \
mydb.backup

注意要点

  • 尽量保证目标数据库的PostgreSQL版本和备份时的版本一致,避免兼容性问题
  • 如果恢复的表有外键、触发器等依赖,若不需要这些依赖,可以加上--no-constraints、--no-triggers参数;若需要,要确保依赖对象也被包含在恢复范围内
  • 恢复前建议先备份目标数据库,防止数据被意外覆盖

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 04:57:14