
本镜像是一个在 Docker 环境中使用 pg_upgrade 工具进行 PostgreSQL 版本升级的概念验证(PoC)实现。其核心用途是协助用户在 Docker 容器化环境中,将 PostgreSQL 数据库从当前版本(OLD)升级到目标版本(NEW)。注意:此镜像为概念验证工具,需根据实际需求进行适配和测试,不可直接用于生产环境。
镜像源码可参考:https://github.com/tianon/docker-postgres-upgrade
镜像标签遵循 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 # 启用链接模式(提升性能)
具体示例(9.4 升级到 9.5)
假设:
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 参数
具体示例(9.4 升级到 9.5)
假设:
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 或应用验证数据完整性和功能正常性。您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。






探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
docker search 限制
站内搜不到镜像
离线 save/load
插件要用 plugin install
WSL 拉取慢
安全与 digest
新手拉取配置
镜像合规机制
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
域名连通性排查
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务