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

Sequelize连接PostgreSQL未用指定用户名,报角色不存在错误

Sequelize连接PostgreSQL时忽略配置用户,使用系统用户名的问题

我尝试通过Sequelize连接本地PostgreSQL数据库,使用pgAdmin以postgres用户、无密码可正常访问。

向Sequelize构造函数传入以下配置:

const sequelize = new Sequelize({
    dialect: 'postgres',
    database: 'green',
    user: 'postgres',
    password: '',
    host: 'localhost',
    port: 5432,
    ssl: true,
    clientMinMessages: 'notice',
});

但收到错误:[SequelizeConnectionError]: role "MyActualName" does not exist

已确认项目中未出现过MyActualName这个名称,且排查包内代码发现,创建连接时connectionConfig对象包含设置的host、database、password和port,但user属性为undefined。

已尝试的操作

  • 添加拥有全部权限的新用户并设置密码,仍出现相同错误
  • 将PG认证方式从"trust"改为md5并重启PG,问题依旧
  • 本地另一应用Prisma使用相同用户连接同一服务器的其他数据库可正常运行

解决方法

  1. 修正配置参数名
    部分Sequelize版本中,用户名的配置参数是username而非user,使用user会被驱动忽略,导致默认读取系统用户名。将配置里的user替换为username:

    const sequelize = new Sequelize({
        dialect: 'postgres',
        database: 'green',
        username: 'postgres',
        password: '',
        host: 'localhost',
        port: 5432,
        ssl: true,
        clientMinMessages: 'notice',
    });
    
  2. 检查环境变量干扰
    PostgreSQL驱动会优先读取PGUSER环境变量作为用户名,如果该变量被设置为你的系统用户名,会直接覆盖配置参数。可以在代码开头打印console.log(process.env.PGUSER)确认,若存在则删除该环境变量,或在代码中显式覆盖:

    process.env.PGUSER = 'postgres';
    const sequelize = new Sequelize({...});
    
  3. 排查配置格式混用
    确认未混用URL连接格式与对象配置格式,若项目中存在连接字符串相关的残留逻辑,可能会覆盖当前的对象配置参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 06:22:19