Lambda函数向PostgreSQL插入数据时TypeError问题排查
解决:TypeError: "The 'string' argument must be of type string or an instance of Buffer or ArrayBuffer. Received an instance of Promise"
问题场景
使用 Node.js 16.17.0、AWS Lambda 默认 AWS SDK 及 pg@^8.7.3,通过 s3.getObject(params).promise() 获取 S3 中的 JSON 文件内容后尝试插入 PostgreSQL 数据库(此前用测试数据成功插入过5000行),执行代码时触发上述 TypeError。试过手动创建 Promise、使用 .then() 等方法都无效,曾怀疑版本问题但未找到相关解决方案。
核心错误原因
- 异步令牌获取未正确等待:
getToken是异步函数,但获取 token 时未添加await,导致传给 pg Pool 的password参数是 Promise 实例,而非预期的字符串格式 RDS 认证令牌。 - 数据解析逻辑错误:解析 S3 返回体后,错误地再次访问
results.results[0]['items']并转为字符串,导致后续代码无法正确读取数组元素。
内容的提问来源于stack exchange,提问作者ryan6627
相关产品推荐
相关产品推荐

