GitHub Actions中如何同步psql与PostgreSQL服务版本?
同步PostgreSQL客户端与服务端版本的最佳实践
针对你的场景,需要让Runner中的pg_restore/psql版本与PostgreSQL 17服务端匹配,以下是两种可靠的落地方案:
方案一:在Ubuntu Runner中安装PostgreSQL 17客户端工具
通过添加PostgreSQL官方APT源,替换系统默认的14版本客户端:
jobs: my-job: runs-on: ubuntu-latest services: postgres: image: postgres:17 env: POSTGRES_PASSWORD: postgres options: >- --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 ports: - 5432:5432 steps: - name: 添加PostgreSQL官方APT源 run: | sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list' wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add - sudo apt-get update - name: 安装PostgreSQL 17客户端 run: sudo apt-get install -y postgresql-client-17 - name: 验证版本匹配 run: pg_restore -V - name: 验证服务端连接 run: psql -h localhost -U postgres -d postgres -c 'select version()' env: PGPASSWORD: postgres
方案二:直接在PostgreSQL服务容器内执行工具命令
利用GitHub Actions服务容器的特性,直接在PostgreSQL 17容器内运行pg_restore,无需在Runner中安装对应版本:
jobs: my-job: runs-on: ubuntu-latest services: postgres: image: postgres:17 env: POSTGRES_PASSWORD: postgres options: >- --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 steps: - name: 检查容器内pg_restore版本 run: docker exec ${{ job.services.postgres.id }} pg_restore -V - name: 在容器内恢复备份(示例) run: | # 假设备份文件已上传至Runner工作目录 docker cp ./your-backup.sql ${{ job.services.postgres.id }}:/tmp/backup.sql docker exec ${{ job.services.postgres.id }} pg_restore -U postgres -d postgres /tmp/backup.sql env: PGPASSWORD: postgres
方案选择建议
- 若需要在Runner中频繁调用PostgreSQL客户端命令,优先选方案一,后续步骤无需额外处理容器逻辑。
- 若仅需执行恢复操作,方案二更轻量,避免修改Runner环境,减少依赖安装时间。
内容的提问来源于stack exchange,提问作者xehpuk
相关产品推荐
相关产品推荐

