PostgresSQL in Docker 版本更新与数据迁移
前请提要
由于想要将Gitlab 和Nexus 3 都更新一下,故顺便更新下Postgres。将Postgres 15 更新到Postgres 16。
现状
现在的Postgres 是部署在Docker 中的。数据卷通过Docker 的bind-mount 映射到的宿主机中。
原容器的docker compose file 部分内容如下:
postgres-15:
container_name: postgres-15
image: postgres:15.8
restart: unless-stopped
ports:
- 54322:5432
networks:
network-database:
ipv4_address: 172.19.19.22
aliases:
- database-postgres-15
volumes:
- ./Postgres/15/data/:/var/lib/postgresql/data/
env_file:
- ./env_file/TimeZone.env
- ./env_file/PostgreSQL.env
更新计划
- 直接新建一个docker 容器
postgres: container_name: postgres-16 image: postgres:16.9 restart: unless-stopped ports: - 5432:5432 networks: network-database: ipv4_address: 172.19.19.2 aliases: - database-postgres volumes: - ./Postgres/16/data/:/var/lib/postgresql/data/ env_file: - ./env_file/TimeZone.env - ./env_file/PostgreSQL.env
- 应用程序停机(Gitlab)
- 将原容器数据使用
pg_dumpall
迁移到新容器中docker exec -i -t postgres-16 bash pg_dumpall -h 172.19.19.22 -U postgres -W > pg_data_15.dump psql -X -U postgres -W < pg_data_15.dump vacuumdb -a -z
参考文档
Upgrading a PostgreSQL Cluster
SQL Dump
pg_dumpall
psql
vacuumdb
PostgresSQL in Docker 版本更新与数据迁移
https://halo.persipa.site/2025/mhZFa8yL