重庆思庄Oracle、KingBase、PostgreSQL、Redhat认证学习论坛

标题: PostgreSQL 数据库windows服务器搭建测试库实施文档 [打印本页]

作者: mahan    时间: 2026-3-8 19:18
标题: PostgreSQL 数据库windows服务器搭建测试库实施文档
1. 实施背景与目标
任务目标: 将生产环境下的 PostgreSQL 数据库(含全局角色、postgres 系统库及 zlregister 业务库)克隆并部署到全新的测试环境中。

源环境(正式库): Windows Server 2016

目标环境(测试库): Windows Server 2016

迁移方式: 逻辑备份与恢复(pg_dump / pg_restore),通过物理文件传输跨服务器迁移。

2. 环境准备与注意事项
操作权限: 在两台服务器上,均需以管理员身份运行命令提示符 (CMD)。

路径环境变量: 确保操作始终在 PostgreSQL 的 bin 目录下执行(例如:C:\Program Files\PostgreSQL\12\bin),或已将该目录加入系统环境变量。

字符编码提示: Windows CMD 默认编码通常为 GBK,执行恢复时可能会出现乱码提示(如角色已存在等),只要不中断执行且无 Fatal 错误,均属正常现象。

3. 数据备份阶段(操作节点:正式服务器)
打开命令提示符 (CMD),进入 PostgreSQL 的 bin 目录,依次执行以下操作。

3.1 声明临时密码环境变量
避免因 Windows CMD 交互限制导致无法输入密码报错:

DOS
set PGPASSWORD=正式库postgres用户的密码
3.2 导出全局角色配置
导出所有数据库用户及其权限信息:

DOS
pg_dumpall.exe -U postgres -r -f "D:\backup\roles_backup.sql"
3.3 导出 postgres 系统库
采用自定义压缩格式(-Fc)导出:

DOS
pg_dump.exe -U postgres -Fc -f "D:\backup\postgres.dump" -d postgres
3.4 导出 zlregister 业务库
采用自定义压缩格式(-Fc)导出业务数据:

DOS
pg_dump.exe -U postgres -Fc -f "D:\backup\zlregister.dump" -d zlregister
4. 文件传输阶段
将正式服务器 D:\backup\ 目录下的三个文件安全传输至测试服务器的对应目录(如 D:\backup\):

roles_backup.sql

postgres.dump

zlregister.dump

5. 数据恢复阶段(操作节点:测试服务器)
在测试服务器上打开命令提示符 (CMD),进入 PostgreSQL 的 bin 目录,严格按照以下顺序执行。

5.1 声明临时密码环境变量
DOS
set PGPASSWORD=测试库postgres用户的密码
5.2 恢复全局角色
导入用户角色配置。

预期现象: 屏幕可能会出现包含乱码的报错(实际为 错误 : 角色 "postgres" 已经存在)。这是因为新库自带该超级用户,系统会自动执行 ALTER ROLE 更新其属性,可安全忽略。

DOS
psql.exe -U postgres -f "D:\backup\roles_backup.sql"
5.3 恢复 postgres 系统库
将系统库配置覆盖导入。引入 -c (清理) 和 --if-exists 参数,防止因安全软件(如深信服自动创建的 cmd_exec_sangfor 表)导致对象冲突而中断恢复。

DOS
pg_restore.exe -U postgres -d postgres -c --if-exists "D:\backup\postgres.dump"
5.4 创建并恢复 zlregister 业务库
业务库必须先创建空库,再使用单事务模式(-1)进行安全导入。

创建空数据库:

DOS
createdb.exe -U postgres zlregister
导入业务数据:

DOS
pg_restore.exe -U postgres -d zlregister -1 "D:\backup\zlregister.dump"
6. 数据验证阶段
在测试服务器上通过 psql 工具或图形化客户端(如 pgAdmin、Navicat)进行数据一致性核对。

6.1 物理存储容量对比
核对新旧数据库占用的磁盘空间差异(逻辑备份恢复后,新库因自动清理了数据碎片,通常会略小于原库):

SQL
SELECT datname AS "数据库名",
       pg_size_pretty(pg_database_size(datname)) AS "物理大小"
FROM pg_database
WHERE datname IN ('postgres', 'zlregister');
6.2 业务表数量核查
连接至 zlregister 库,验证表结构是否全部迁移:

SQL
\c zlregister
SELECT count(*) AS "表总数" FROM pg_tables WHERE schemaname = 'public';
6.3 核心数据行数抽样
选取业务最核心的 2-3 张大表,在正式库与测试库分别执行 COUNT(*),确保行数 100% 一致。

SQL
SELECT count(*) FROM 核心表名;
6.4 应用层联调测试
将测试环境的应用服务数据库连接配置(IP、端口、账号、密码)指向测试数据库。

启动应用,进行常规的系统登录及增删改查业务操作,确认运行无异常。






欢迎光临 重庆思庄Oracle、KingBase、PostgreSQL、Redhat认证学习论坛 (http://bbs.cqsztech.com/) Powered by Discuz! X3.2