如何从--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
相关产品推荐
相关产品推荐

