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

在GitHub Actions中运行Go集成测试时PostgreSQL连接失败排查

问题原因及解决办法

核心问题

你的测试代码或数据库连接配置默认用了Unix域套接字(从错误里的host=/tmp能看出来),但GitHub Actions里官方提供的PostgreSQL服务默认不会在/tmp路径下创建Unix套接字,而是只开启TCP端口连接(默认5432端口)。本地docker-compose能正常运行,大概率是你配置了把容器内的套接字挂载到宿主机器的/tmp目录,但GitHub Actions的PostgreSQL服务没做这个配置。

具体解决步骤

1. 改用TCP连接修改数据库连接字符串

把连接串里的host=/tmp换成host=localhost(GitHub Actions里PostgreSQL服务默认绑定localhost),同时补全端口、用户名、密码和数据库名。

比如原来的代码可能是:

db, err := sql.Open("postgres", "host=/tmp user=nonroot dbname=your_db sslmode=disable")

改成:

db, err := sql.Open("postgres", "host=localhost port=5432 user=postgres password=your_pwd dbname=your_db sslmode=disable")

注意:GitHub Actions的PostgreSQL服务默认用户名是postgres,密码需要在工作流文件里用POSTGRES_PASSWORD环境变量设置,数据库名没指定的话默认是postgres。

2. 检查GitHub Actions工作流配置

确保你的工作流文件正确配置了PostgreSQL服务,并设置好对应环境变量:

jobs:
  test:
    runs-on: ubuntu-latest
    services:
      postgres:
        image: postgres:latest
        env:
          POSTGRES_PASSWORD: your_pwd  # 和连接串里的密码一致
          POSTGRES_DB: your_db         # 和连接串里的数据库名一致
        ports:
          - 5432:5432
        options: >-
          --health-cmd pg_isready
          --health-interval 10s
          --health-timeout 5s
          --health-retries 5
    steps:
      - uses: actions/checkout@v4
      - name: 配置Go环境
        uses: actions/setup-go@v5
        with:
          go-version: '1.21'
      - name: 运行测试
        env:
          DATABASE_URL: "host=localhost port=5432 user=postgres password=your_pwd dbname=your_db sslmode=disable"
        run: go test ./...

3. 用环境变量统一管理连接参数(推荐)

本地和GitHub Actions通过环境变量区分连接配置,比如本地把DATABASE_URL设为Unix套接字的连接串,GitHub Actions里设为TCP的连接串,这样不用改代码,只需要在不同环境配置环境变量就行。

额外可选方案(不推荐)

如果非要用Unix套接字连接,得在GitHub Actions的PostgreSQL服务配置里,把宿主机的/tmp目录挂载到容器内PostgreSQL套接字的默认路径(一般是/var/run/postgresql/),然后把连接串的host改成/var/run/postgresql/。但这种方式比TCP连接麻烦,没必要优先选。

内容的提问来源于stack exchange,提问作者panza

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 00:40:44