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

如何解决Cypress 10+连接PostgreSQL时的pg_hba.conf无条目错误

解决PostgreSQL连接Cypress报错:"no pg_hba.conf entry for host "...", user "postgres", database "postgres", SSL off"

问题说明

尝试连接并查询PostgreSQL数据库时,持续收到Cypress错误:

“no pg_hba.conf entry for host "...", user "postgres", database "postgres", SSL off”

请问该如何解决这个错误?这是代码问题还是数据库问题?

当前使用的cypress.config.js文件

const pg = require("pg")
module.exports = defineConfig({

  e2e: {
    setupNodeEvents(on, config) {
      on("task", {
        // 创建任务 - 接收两个参数:配置和SQL语句
        READFROMDB({ dbConfig, sql }) {
          // 通过配置创建客户端
          const client = new pg.Pool(dbConfig)
          // 返回SQL查询结果
          return client.query(sql)
        }
      })
    },

    DB:{
      database: "<name>",
      user: "<name>",
      password: "<pw>",
      host: "<hostname>.amazonaws.com", // 非localhost
      port: 5432,
      dialect: "postgres",
      dialectOptions: {
        ssl: {
          require: true, // 尝试启用SSL,但会触发新错误
          rejectUnauthorized: false // 用于修复新错误
        }
      }
    }
  }
  
})

测试代码

cy.task("READFROMDB",{
        // 从配置中获取数据库参数
        dbConfig: Cypress.config('DB'),
        // 要执行的SQL语句
        sql: 'select * from user where user=\'Phoebe\''
    }).then((result)=>{
        console.log(result.rows)
    })

问题原因

这是配置不匹配问题,不是代码逻辑错误。核心原因是:你使用的AWS托管PostgreSQL实例强制要求SSL连接,但当前代码里的SSL配置无法被原生pg库识别,导致实际连接未启用SSL,数据库拒绝请求。

你写的dialectOptions是Sequelize等ORM框架的配置项,直接用原生pg库时,这个参数不会生效,等于SSL没开。

解决方法

1. 修正数据库配置(关键)

修改DB配置,改用pg库原生支持的ssl参数:

const pg = require("pg")
module.exports = defineConfig({

  e2e: {
    setupNodeEvents(on, config) {
      on("task", {
        READFROMDB({ dbConfig, sql }) {
          const client = new pg.Pool(dbConfig)
          return client.query(sql)
        }
      })
    },

    DB:{
      database: "<name>",
      user: "<name>",
      password: "<pw>",
      host: "<hostname>.amazonaws.com",
      port: 5432,
      // 删除dialect和dialectOptions,改用pg原生ssl配置
      ssl: {
        rejectUnauthorized: false // AWS RDS需要此配置,跳过证书验证
      }
    }
  }
  
})

2. 修正SQL语句

user是PostgreSQL的保留字,直接使用会报错,需要用双引号包裹:

sql: 'select * from "user" where "user" = \'Phoebe\''

总结

  1. 错误根源是配置参数不兼容,pg库无法识别Sequelize的配置项,导致SSL未启用。
  2. 改用pg原生支持的ssl参数即可解决连接问题。
  3. 同时要注意SQL里的保留字写法,避免后续查询报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 06:55:22