【发布时间】:2025-12-12 09:40:01
【问题描述】:
UPDATE/SOLVED ...问题是 pgpass 插件正在寻找 $HOME/.pgpass,而 $HOME 未在 lambda 上定义,导致 join(undefined, '.pgpass') 失败。真的不值得把答案归功于自己....
我在 lambda 处理程序中有以下测试代码(从 typescript 编译):
const db = new Pool()
const {rows} = await db.query('select 1 as x')
console.log('rows', JSON.stringify(rows))
连接是通过环境中的 PGHOST PGPORT PGUSER PGDATABASE 创建的。我知道配置“几乎正确”,因为我第一次尝试时得到:
{"errorMessage":"error: no pg_hba.conf entry for host \"10.1.1.249\", 用户 \"foo\",数据库 \"bar\",SSL 关闭\n at Connection.parseE (/var/task/handler.js:9209:11)\n 在 Connection.parseMessage (/var/task/handler.js:9034:19)\n 在 插座。 (/var/task/handler.js:8777:22)\n 在 emitOne (events.js:96:13)\n 在 Socket.emit (events.js:188:7)\n 在 可读AddChunk (_stream_readable.js:176:18)\n at TCP.onread 处的 Socket.Readable.push (_stream_readable.js:134:10)\n (net.js:547:20)"}
这似乎充满希望。我将 postgres 配置更改为允许来自子网,然后再次尝试。但是,现在我得到了:
2018-02-06 18:14:21.183 (-05:00) 76761ca5-0b93-11e8-8783-a74d098c9f4a select
2018-02-06 18:14:21.202 (-05:00) 76761ca5-0b93-11e8-8783-a74d098c9f4a TypeError: Path must be a string. Received undefined
at assertPath (path.js:7:11)
at Object.join (path.js:1211:7)
at Object.module.exports.getFileName (/var/task/handler.js:32434:16)
at module.exports (/var/task/handler.js:32355:23)
at Connection.<anonymous> (/var/task/handler.js:31255:9)
at emitOne (events.js:96:13)
at Connection.emit (events.js:188:7)
at Socket.<anonymous> (/var/task/handler.js:8781:12)
at emitOne (events.js:96:13)
at Socket.emit (events.js:188:7)
END RequestId: 76761ca5-0b93-11e8-8783-a74d098c9f4a
发生了什么事?好像它第一次到达数据库并连接了......现在它在query 上失败了。有什么我应该使用的选项吗?
【问题讨论】:
-
请展示您的处理程序源代码。因为我们看不到您何时/如何连接到与您的处理程序函数相关的数据库。打字稿很好。
-
@dashmug 处理程序只是包装发布的行。连接在调用查询时被隐式处理。 (见github.com/brianc/node-pg-pool#your-new-favorite-helper-method)所有参数都在环境中。
-
试过
console.log(process.env.PGHOST)看环境变量有没有设置好? -
是的...打印出process.env,它包括PGHOST等。PGHOST是IP地址(不是主机名),但这应该可以。
-
您应该相信自己的答案。解决了我的问题。
标签: node.js amazon-web-services aws-lambda node-postgres