Windows 10下PostgreSQL 14.5含表空间的集群恢复方法
Windows 10下PostgreSQL 14.5带表空间的basebackup恢复流程
前置准备
- 停止目标机器上的PostgreSQL 14服务,可通过服务管理器或命令行执行:
net stop postgresql-x64-14 - 若为全新恢复,清空目标集群的数据目录(默认路径如
C:\Program Files\PostgreSQL\14\data);若覆盖现有集群,提前做好数据备份
1. 恢复基础集群文件
将base.tar解压到目标集群的数据目录下,确保解压后目录结构与原集群一致(数据目录下直接出现global、pg_commit_ts等核心文件夹)
2. 确定表空间对应路径
方式一:查看备份清单backup_manifest
打开backup_manifest文件,找到OID为21511、21512的表空间条目,其中包含原集群中该表空间的物理路径,示例条目如下:
"tablespaces": [
{
"oid": 21511,
"name": "data_tblspc",
"location": "D:\pg_tblspaces\data",
"tar_file": "21511.tar"
},
...
]
方式二:原集群查询(原集群可访问时)
连接原集群执行SQL:
SELECT oid, spcname, spclocation FROM pg_tablespace;
根据OID(21511、21512)找到对应的spclocation路径
3. 恢复表空间文件
- 在目标机器上创建与原路径完全一致的目录(例如原路径为
D:\pg_tblspaces\data,目标机器必须创建相同路径) - 给目录分配权限:添加PostgreSQL服务账号(默认是
NT SERVICE\postgresql-x64-14),赋予其完全控制权限 - 将对应OID的tar文件解压到各自目录中,确保解压后目录下直接出现表空间核心文件(如
PG_14_202107181文件夹)
4. 恢复WAL日志
将pg_wal.tar解压到目标集群数据目录下的pg_wal子文件夹中,覆盖原有文件(若存在)
5. 触发恢复流程
在目标集群的数据目录下创建空文件recovery.signal(无扩展名),PostgreSQL启动时会识别该文件并执行恢复操作
6. 启动服务并验证
- 启动PostgreSQL服务:
net start postgresql-x64-14 - 连接数据库验证:
- 执行
SELECT oid, spcname, spclocation FROM pg_tablespace;确认表空间路径正确 - 查询对应表空间中的表和索引,验证数据完整性
- 执行
内容的提问来源于stack exchange,提问作者ennine
相关产品推荐
相关产品推荐

