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

Postgres测试库连接报SASL密码错误,开发库连接正常

解决方案

1. 修复测试脚本的ENV设置命令

package.json里的测试脚本存在命令分隔错误,导致ENV变量值被错误赋值,修改为:

"test": "set ENV=test && db-migrate --env test up && jasmine && db-migrate --env test down"

2. 确保database变量始终有合法配置(可选但推荐)

在database.ts中,避免因ENV值不符合预期导致配置未初始化:

let database = {
  host: POSTGRES_HOST,
  user: POSTGRES_USER,
  password: POSTGRES_PASSWORD,
  database: POSTGRES_DB
}

if (ENV === 'dev') {
  database.database = POSTGRES_DB
} else if (ENV === 'test') {
  database.database = POSTGRES_TEST_DB
}

3. 可选:统一测试环境的独立密码配置

如果测试数据库使用单独的密码(.env中的POSTGRES_TEST_PASSWORD),需要同步修改两处配置:

  • database.ts的test分支:
else if (ENV === 'test') {
  database = {
    host: POSTGRES_HOST,
    database: POSTGRES_TEST_DB,
    user: POSTGRES_USER,
    password: process.env.POSTGRES_TEST_PASSWORD!
  }
}
  • database.json的test配置:
"test": {
  "driver": "pg",
  "host": { "ENV": "POSTGRES_HOST" },
  "database": { "ENV": "POSTGRES_TEST_DB" },
  "user": { "ENV": "POSTGRES_USER" },
  "password": { "ENV": "POSTGRES_TEST_PASSWORD" }
}
问题原因分析
  1. ENV变量赋值错误:原测试脚本中set ENV=test后未用&&分隔后续命令,Windows命令行将ENV的值设为test db-migrate --env test up,而非预期的test。此时database.ts中的ENV === 'test'判断不成立,database变量未被正确初始化,传递给Pool的配置里password为undefined,触发SASL认证错误。
  2. 测试阶段的连接触发时机:前三个测试仅检查方法是否存在,不需要建立数据库连接,因此不会暴露配置问题;最后一个测试调用store.create时才尝试连接数据库,错误才显现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 06:09:50