You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 06:05:10