我觉得我什么都试过了。我有一个云函数,我正在尝试连接到云SQL(PostgreSQL引擎(。在此之前,我从SecretsManager中提取连接字符串信息,在凭据对象中设置该信息,并调用pg(包(池来运行数据库查询。
以下是我的代码:凭据:
import { Pool } from 'pg';
const credentials: sqlCredentials = {
"host":"127.0.0.1",
"database":"myFirstDatabase",
"port":"5432",
"user":"postgres",
"password":"postgres1!"
}
const pool: Pool = new Pool(credentials);
await pool.query(`select CURRENT_DATE;`).catch(error => console.error(`error in pool.query: ${error}`));
在使用此代码运行云功能时,我得到以下错误:
error in pool.query: Error: connect ECONNREFUSED 127.0.0.1:5432
我曾尝试将主机更新为Cloud SQL实例的私有IP,并在此环境中将主机更新为云SQL实例名称,但都无济于事。还有其他想法吗?
历经磨难,我找到了答案。鉴于没有关于如何解决这个问题的文件,我将把答案放在这里,希望我能在2025年回到这里,看到它已经帮助了数百人。事实上,我现在正在手机中设置提醒,以便在2025年11月24日查看此URL。
解决方案:主机必须设置为:
/cloudsql/<googleProjectName(notId)>:<region>:<sql instanceName>
结束代码:
import { Pool } from 'pg';
const credentials: sqlCredentials = {
"host":"/cloudsql/my-first-project-191923:us-east1:my-first-cloudsql-inst",
"database":"myFirstDatabase",
"port":"5432",
"user":"postgres",
"password":"postgres1!"
}
const pool: Pool = new Pool(credentials);
await pool.query(`select CURRENT_DATE;`).catch(error => console.error(`error in pool.query: ${error}`));