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

Docker部署PostgreSQL后Go测试报pq: role "sumka"不存在如何解决

问题排查解决步骤

报错pq: role "sumka" does not exist为PostgreSQL标准角色不存在错误,因DBeaver可正常连接,优先按以下顺序排查Go测试和DBeaver的连接差异:

  • 确认测试实际加载的连接串是否正确
    很多时候测试代码读取的配置不是你预设的连接串,先在testQueries初始化位置打印实际使用的数据库连接地址,确认是否和你给出的postgresql://sumka:secret@0.0.0.0:5432/simple_bank?sslmode=disable一致,排查是否误连到本地非Docker部署的PostgreSQL实例、或者Docker端口映射配置错误。

  • 验证Docker内PostgreSQL的角色配置
    执行命令进入PostgreSQL容器:
    docker exec -it 你的PostgreSQL容器名称 psql -U postgres
    执行SQL查询所有已存在的角色:
    SELECT rolname FROM pg_roles;
    如果查询结果中没有sumka,执行以下语句创建角色并分配权限:

    CREATE ROLE sumka WITH LOGIN PASSWORD 'secret';
    ALTER ROLE sumka CREATEDB; -- 测试如果需要创建临时库必须添加该权限
    GRANT ALL PRIVILEGES ON DATABASE simple_bank TO sumka;
    -- 切换到simple_bank库分配表和序列权限
    \c simple_bank
    GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO sumka;
    GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO sumka;
    

    另外注意PostgreSQL的角色名如果创建时加了双引号会区分大小写,如果你之前执行过CREATE ROLE "Sumka"这类语句,小写的sumka连接时就会报不存在。

  • 排查容器启动配置是否错误
    如果你通过docker run或者docker-compose启动PostgreSQL容器,检查启动时的环境变量配置,示例正确配置如下:

    # docker-compose.yaml 配置参考
    services:
      postgres:
        image: postgres:14-alpine
        environment:
          - POSTGRES_USER=sumka
          - POSTGRES_PASSWORD=secret
          - POSTGRES_DB=simple_bank
        ports:
          - "5432:5432"
    

    容器首次启动时只会创建POSTGRES_USER指定的默认角色,如果你配置的默认用户不是sumka,就不会自动生成该角色。

  • 排查跨容器连接问题
    如果你的Go测试是运行在另一个Docker容器内,连接串填0.0.0.0会指向Go容器本身而不是宿主的PostgreSQL容器,需要把连接地址改为Docker内网地址、或者宿主机器的局域网IP。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 23:06:01