本镜像是一个在 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 或应用验证数据完整性和功能正常性。来自真实用户的反馈,见证轩辕镜像的优质服务
免费版仅支持 Docker Hub 加速,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
免费版仅支持 docker.io;专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
在 Linux 系统配置镜像加速服务
在 Docker Desktop 配置镜像加速
Docker Compose 项目配置加速
Kubernetes 集群配置 Containerd
在宝塔面板一键配置镜像加速
Synology 群晖 NAS 配置加速
飞牛 fnOS 系统配置镜像加速
极空间 NAS 系统配置加速服务
爱快 iKuai 路由系统配置加速
绿联 NAS 系统配置镜像加速
QNAP 威联通 NAS 配置加速
Podman 容器引擎配置加速
HPC 科学计算容器配置加速
ghcr、Quay、nvcr 等镜像仓库
无需登录使用专属域名加速
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429