本站支持搜索的镜像仓库:Docker Hub、gcr.io、ghcr.io、quay.io、k8s.gcr.io、registry.gcr.io、elastic.co、mcr.microsoft.com
pgxn/pgxn-tools是一个用于自动化测试PostgreSQL扩展(针对多版本PostgreSQL)并发布到PGXN(PostgreSQL扩展网络)的Docker镜像。基于Debian Bookworm Slim构建,使用PostgreSQL Apt仓库安装PostgreSQL,支持8.2及以上版本(包括最新预发布版)。
镜像包含以下实用工具:
pgxn: PGXN命令行客户端,用于从PGXN安装扩展依赖pg_prove: 运行pgTAP测试的工具pg-start: 安装指定主版本的PostgreSQL并启动集群pg-build-test: 构建并测试当前目录中的PGXS扩展pgrx-build-test: 构建并测试当前目录中的pgrx扩展pgxn-bundle: 验证PGXN META.json文件并打包发布版本pgxn-release: 将扩展发布到PGXN使用Docker CLI运行pgxn-tools容器,基本命令格式如下:
docker run -it --rm -w /repo --volume "$PWD:/repo" pgxn/pgxn-tools \ sh -c 'pg-start 16 && pg-build-test'
此示例将当前目录挂载到容器的/repo目录,启动PostgreSQL 16,然后构建并测试该目录中的扩展。
注意:GitHub工作流容器作业必须以root运行,本节的非特权用户选项在此场景下不适用。
默认容器以root用户运行。如需以非特权用户运行,可通过AS_USER环境变量创建具有sudo权限的用户:
docker run -it --rm -w /repo -e AS_USER=worker \ --volume "$PWD:/repo" pgxn/pgxn-tools \ sh -c 'sudo pg-start 14 && pg-build-test'
创建的用户默认UID为1001,可通过LOCAL_UID指定本地UID以访问挂载卷中的文件:
docker run -it --rm -w /repo -e AS_USER=worker -e LOCAL_UID=$(id -u) \ --volume "$PWD:/repo" pgxn/pgxn-tools \ sh -c 'sudo pg-start 14 && pg-build-test'
容器中已包含nobody用户和pg-start创建的postgres用户,两者均具有无密码sudo权限。
以下工作流在每次推送和拉取请求时,针对多个PostgreSQL版本测试PGXS扩展:
name: CI on: [push, pull_request] jobs: test: strategy: matrix: pg: [17, 16, 15, 14, 13, 12, 11, 10, 9.6, 9.5, 9.4, 9.3, 9.2, 9.1, 9.0, 8.4, 8.3, 8.2] name: 🐘 PostgreSQL ${{ matrix.pg }} runs-on: ubuntu-latest container: pgxn/pgxn-tools steps: - name: 启动PostgreSQL ${{ matrix.pg }} run: pg-start ${{ matrix.pg }} - name: 检出代码 uses: actions/checkout@v4 - name: 在PostgreSQL ${{ matrix.pg }}上测试 run: pg-build-test
以下工作流测试pgrx扩展,使用缓存加速依赖安装:
name: CI on: [push, pull_request] jobs: test: strategy: matrix: pg: [16, 15, 14, 13, 12, 11] name: 🐘 PostgreSQL ${{ matrix.pg }} runs-on: ubuntu-latest container: pgxn/pgxn-tools steps: - name: 启动PostgreSQL ${{ matrix.pg }} run: pg-start ${{ matrix.pg }} - name: 检出代码 uses: actions/checkout@v4 - name: 设置Rust缓存 uses: Swatinem/rust-cache@v2 - name: 在PostgreSQL ${{ matrix.pg }}上测试 run: pgrx-build-test
以下工作流在推送匹配v*标签时,自动发布到PGXN和GitHub:
name: Release on: push: tags: ['v[0-9]+.[0-9]+.[0-9]+'] jobs: release: name: 发布到GitHub和PGXN runs-on: ubuntu-latest container: pgxn/pgxn-tools env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} steps: - name: 检出代码 uses: actions/checkout@v4 - name: 打包发布版本 id: bundle run: pgxn-bundle - name: 发布到PGXN env: PGXN_USERNAME: ${{ secrets.PGXN_USERNAME }} PGXN_PASSWORD: ${{ secrets.PGXN_PASSWORD }} run: pgxn-release - name: 创建GitHub发布 id: release uses: actions/create-release@v1 with: tag_name: ${{ github.ref }} release_name: Release ${{ github.ref }} body: | 本次发布变更 - 变更1 - 变更2 - name: 上传发布资产 uses: actions/upload-release-asset@v1 with: upload_url: ${{ steps.release.outputs.upload_url }} asset_path: ./${{ steps.bundle.outputs.bundle }} asset_name: ${{ steps.bundle.outputs.bundle }} asset_content_type: application/zip
GitHub工作流需要root用户操作工作区,可通过以下方式以非特权用户执行命令:
container: pgxn/pgxn-tools steps: - uses: actions/checkout@v4 - run: pg-start 16 - run: chown -R postgres:postgres . - run: gosu postgres pg-build-test
或直接运行Docker镜像并指定用户:
steps: - uses: actions/checkout@v4 - run: >- docker run -w /repo --rm --volume "$(pwd):/repo" -e AS_USER=pgxn_worker -e LOCAL_UID=$(id -u) pgxn/pgxn-tools sh -c 'pg-start && pg-build-test'
pg-start安装并启动指定版本的PostgreSQL集群:
pg-start 12 # 安装并启动PostgreSQL 12 pg-start 11 libsodium-dev # 安装PostgreSQL 11及额外依赖
PGPORT: 指定端口(默认5432)LANG: 设置集群区域(默认C.UTF-8)NO_CLUSTER: 仅安装不启动集群(需手动使用pg_createcluster)示例:修改配置文件并重启集群
# 获取配置文件路径 CONFIG_FILE=$(psql --no-psqlrc -U postgres -Atqc 'SHOW config_file') # 添加配置 echo "shared_preload_libraries = '$libdir/plperl'" >> $CONFIG_FILE # 重启集群 pg_ctlcluster 12 test restart
pg-build-test构建并测试当前目录的PGXS扩展:
pg-build-test # 构建并运行测试
make && make install && make installcheckPROFILE可自定义构建参数(默认--Werror):
export PROFILE=--Wall && pg-build-test
pgrx-build-test构建并测试当前目录的pgrx扩展(需Cargo.toml中指定pgrx版本≥0.11.4):
pgrx-build-test # 构建并运行测试
make installcheck(如Makefile定义该目标)pgxn-bundle验证META.json并打包发布版本:
pgxn-bundle # 从META.json读取名称和版本并打包 # 或手动指定 PGXN_DIST_NAME=widget PGXN_DIST_VERSION=1.0.0 pgxn-bundle
GIT_ARCHIVE_CMD=archive-all: 包含Git子模块GIT_BUNDLE_OPTS: 传递给git archive的参数ZIP_BUNDLE_OPTS: 传递给zip的参数pgxn-release发布打包文件到PGXN:
export PGXN_USERNAME=用户名 export PGXN_PASSWORD=密码 pgxn-release # 发布当前打包文件 pgxn-release widget-1.0.0.zip # 发布指定文件
PGXN_USERNAME和PGXN_PASSWORDpgxnPGXN命令行客户端,用于安装扩展依赖:
pgxn install semver # 安装semver扩展
pg_prove运行pgTAP测试:
pg_prove -r --ext .sql test/ # 递归运行test目录下的.sql测试文件



免费版仅支持 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 登录方式配置轩辕镜像加速服务,包含7个详细步骤
在 Linux 系统上配置轩辕镜像源,支持主流发行版
在 Docker Desktop 中配置轩辕镜像加速,适用于桌面系统
在 Docker Compose 中使用轩辕镜像加速,支持容器编排
在 k8s 中配置 containerd 使用轩辕镜像加速
在宝塔面板中配置轩辕镜像加速,提升服务器管理效率
在 Synology 群晖NAS系统中配置轩辕镜像加速
在飞牛fnOS系统中配置轩辕镜像加速
在极空间NAS中配置轩辕镜像加速
在爱快ikuai系统中配置轩辕镜像加速
在绿联NAS系统中配置轩辕镜像加速
在威联通NAS系统中配置轩辕镜像加速
在 Podman 中配置轩辕镜像加速,支持多系统
配置轩辕镜像加速9大主流镜像仓库,包含详细配置步骤
无需登录即可使用轩辕镜像加速服务,更加便捷高效
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429