
tianon/postgres-upgrade本镜像是一个在 Docker 环境中使用 pg_upgrade 工具进行 PostgreSQL 版本升级的概念验证(PoC)实现。其核心用途是协助用户在 Docker 容器化环境中,将 PostgreSQL 数据库从当前版本(OLD)升级到目标版本(NEW)。注意:此镜像为概念验证工具,需根据实际需求进行适配和测试,不可直接用于生产环境。
镜像源码可参考:[***]
镜像标签遵循 OLD-to-NEW 格式,其中:
OLD:当前运行的 PostgreSQL 版本(如 9.4)NEW:目标升级的 PostgreSQL 版本(如 9.5)支持通过 --link 参数启用链接模式,避免数据复制,直接创建新旧数据目录的硬链接,显著提升升级性能(具体原理参见 pg_upgrade 文档)。
提供两种目录结构适配方案:
--link 模式(高性能)pg_upgrade 工具的环境配置和依赖管理OLD 和 NEW 版本的兼容性(参考 PostgreSQL 官方升级说明)--link)数据目录需满足以下层级结构,其中 DIR 为宿主机根目录,OLD 和 NEW 分别为当前和目标 PostgreSQL 版本:
console$ find DIR -mindepth 2 -maxdepth 2 DIR/OLD/data # 旧版本数据目录 DIR/NEW/data # 新版本数据目录(需提前创建空目录)
console$ docker run --rm \ -v DIR:/var/lib/postgresql \ # 挂载宿主机根目录到容器内 /var/lib/postgresql tianon/postgres-upgrade:OLD-to-NEW \ # 指定镜像标签(OLD-to-NEW) --link # 启用链接模式(提升性能)
假设:
OLD=9.4,新版本 NEW=9.5DIR=/mnt/bigdrive/postgresqlconsole$ find /mnt/bigdrive/postgresql -mindepth 2 -maxdepth 2 /mnt/bigdrive/postgresql/9.4/data # 旧版本数据目录(原 postgres:9.4 容器挂载路径) /mnt/bigdrive/postgresql/9.5/data # 新版本数据目录(为空目录,供 postgres:9.5 使用)
console$ docker run --rm \ -v /mnt/bigdrive/postgresql:/var/lib/postgresql \ tianon/postgres-upgrade:9.4-to-9.5 \ --link
--link)直接挂载旧版本数据目录(PGDATAOLD)和新版本数据目录(PGDATANEW),无需特定层级关系。
console$ docker run --rm \ -v PGDATAOLD:/var/lib/postgresql/OLD/data \ # 挂载旧版本数据目录 -v PGDATANEW:/var/lib/postgresql/NEW/data \ # 挂载新版本数据目录(需为空) tianon/postgres-upgrade:OLD-to-NEW # 不使用 --link 参数
假设:
PGDATAOLD=/mnt/bigdrive/postgresql-9.4PGDATANEW=/mnt/bigdrive/postgresql-9.5执行升级:
console$ docker run --rm \ -v /mnt/bigdrive/postgresql-9.4:/var/lib/postgresql/9.4/data \ -v /mnt/bigdrive/postgresql-9.5:/var/lib/postgresql/9.5/data \ tianon/postgres-upgrade:9.4-to-9.5
console# 创建工作目录 $ mkdir -p postgres-upgrade-testing && cd postgres-upgrade-testing # 定义版本和目录变量 $ OLD='9.4' $ NEW='9.5'
console# 拉取旧版本镜像 $ docker pull "postgres:$OLD" # 启动旧版本容器(挂载数据目录) $ docker run -dit \ --name postgres-upgrade-testing \ -v "$PWD/$OLD/data:/var/lib/postgresql/data" \ "postgres:$OLD" # 等待容器启动(约5秒) $ sleep 5 # 查看容器日志确认启动成功 $ docker logs --tail 100 postgres-upgrade-testing # 生成测试数据(使用 pgbench) $ docker exec -it \ -u postgres \ postgres-upgrade-testing \ pgbench -i -s 10
console# 停止旧版本容器 $ docker stop postgres-upgrade-testing && docker rm postgres-upgrade-testing # 运行升级容器(使用推荐方法,--link 模式) $ docker run --rm \ -v "$PWD":/var/lib/postgresql \ "tianon/postgres-upgrade:$OLD-to-$NEW" \ --link
console# 拉取新版本镜像 $ docker pull "postgres:$NEW" # 启动新版本容器(挂载升级后的新数据目录) $ docker run -dit \ --name postgres-upgrade-testing \ -v "$PWD/$NEW/data:/var/lib/postgresql/data" \ "postgres:$NEW" # 等待容器启动并查看日志确认成功 $ sleep 5 && docker logs --tail 100 postgres-upgrade-testing
console$ sudo rm -rf "$OLD"
psql 或应用验证数据完整性和功能正常性。





manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务