将数据库从 PostgreSQL 16.x 迁移到 PostgreSQL 17.x
Codebeamer 3.1 支持 PostgreSQL 17.x 数据库。如果现有的 PostgreSQL 数据库版本为 16.x,您必须迁移到 PostgreSQL 17.x 数据库。
在开始迁移过程之前,请确保满足以下先决条件:
• PostgreSQL 17 随 PostgreSQL 16 一同安装。
• 这两个数据库在不同的端口上运行。例如,PostgreSQL 16 在 port 5433 上运行,而 PostgreSQL 17 在 port 5434 上运行。
• 这两个 PostgreSQL 实例均具有单独的二进制路径和数据目录。
• 备份 PostgreSQL 16 数据库。
迁移步骤
1. 创建 .pgpass 文件。为了避免在迁移过程中出现密码提示,需要用到此文件。
创建此文件时,请注意以下事项:
◦ 确保该文件没有任何扩展。
◦ 在 Windows 上,将该文件保存到以下位置:
C:\Users\<您的用户名>\.pgpass.
◦ 以下列格式提供这两个 PostgreSQL 数据库的主机和端口详情:
▪ hostname:pg16_port:pg16_database:pg16_username:pg16_password
▪ hostname:pg17_port:pg17_database:pg17_username:pg17_password
例如:
▪ localhost:5433:*:postgres:yourpassword
▪ localhost:5434:*:postgres:yourpassword
2. 仅在 PostgresSQL 16 数据库上删除 adminpack 扩展。
此步骤是必需的,因为 PostgresSQL 16 支持的 adminpack 扩展不再受 PostgresSQL 17 支持。
要删除 adminpack 扩展:
a. 连接到 PostgreSQL 16 数据库。
b. 运行以下命令:
DROP EXTENSION IF EXISTS adminpack;
3. 运行 pg_upgrade 工具。
a. 以管理员权限打开命令提示符,然后从单独的目录运行该工具。例如,C:\pgupgrade。
b. 通过运行以下命令,将该目录添加到 PATH 环境变量中。确保在运行此命令之前,两个数据库均已停止。
C:\pgupgrade> set PGPASSFILE=C:\Users\<username>\.pgpass
c. 通过运行以下命令,开始迁移数据。确保根据需要更新路径。
C:\pgupgrade> "C:\Program Files\PostgreSQL\17\bin\pg_upgrade.exe" -b "C:\Program Files\PostgreSQL\16\bin" -B "C:\Program Files\PostgreSQL\17\bin" -d "C:\Program Files\PostgreSQL\16\data" -D "C:\Program Files\PostgreSQL\17\data" -U postgres -p <Postgres 16 port> -P <Postgres 17 port>
4. 启动 PostgreSQL 17 服务器。
在转到下一步之前,确保 PostgreSQL 17 服务器正在配置的端口上运行。
5. 如需删除 PostgreSQL 16 数据库,运行 VACUUM ANALYZE 命令。
C:\pgupgrade> "C:\Program Files\PostgreSQL\17\bin\vacuumdb" -U postgres -p 5434 --all --analyze-in-stages
6. 迁移后删除 \.pgpass 文件,以免出现安全漏洞。
7. 通过更新 <Server Install Location>\config 目录下的 Codebeamer 3.0 configuration.properties 文件,添加 PostgreSQL 17 数据库的详情,例如主机、端口、用户名和密码。
8. 将 Codebeamer 服务器从 3.0 升级到 3.1。