PostgreSQL - 连接超时导致连接终止错误。

4
我已在Google Cloud中创建了一个Google Cloud函数,该函数将连接到我创建在Google Cloud中的PostgreSQL实例。
我正在使用 "pg" 节点模块。
我已为此创建了一个私有IP。
当尝试在Google Cloud中查询数据库时,我遇到了以下错误:
“错误:由于连接超时而终止连接,在 Timeout.connectionTimeoutHandle.setTimeout (/workspace/node_modules/pg/lib/client.js:106:28) 处。 在 ontimeout (timers.js: 436:11) 处。 尝试超时 (timers.js: 300:5)。 在 listOnTimeout (timers.js: 263:5) 中。 在计时器.processTimers (timers.js: 223:10) 中。”
这是我在Google Cloud函数中使用的配置:
{ "host":"", "user":"", "pw":"", "db":"", "port":"5432", "table":"", "max":100, "idleTimeoutMillis":30000, "connectionTimeoutMillis":30000 }
请帮助我解决这个问题。
2个回答

4
升级pg npm版本解决了此问题。
"pg": "^7.3.0",

to

"pg": "^8.7.1",

如果问题仍然存在,请检查您的节点版本。升级节点到 >=14。


1
根据官方文档: 从Cloud Functions连接到Cloud SQL

要直接使用专用IP连接,您需要:

1.确保上述创建的Cloud SQL实例具有专用IP地址。如果需要添加,请参见配置专用IP页面以获取说明。

2.在与Cloud SQL实例相同的VPC网络中创建无服务器VPC访问连接器。除非您使用共享VPC,否则连接器必须位于使用它的资源所在的同一项目和区域,但连接器可以向不同区域的资源发送流量。

3.配置Cloud Functions以使用连接器。使用实例的专用IP和端口5432进行连接。

4.使用实例的专用IP和端口5432进行连接

此外,您可以找到建立与数据库连接的Node.js代码:
const connectWithTcp = config => {
  // Extract host and port from socket address
  const dbSocketAddr = process.env.DB_HOST.split(':'); // e.g. '127.0.0.1:5432'

  // Establish a connection to the database
  return Knex({
    client: 'pg',
    connection: {
      user: process.env.DB_USER, // e.g. 'my-user'
      password: process.env.DB_PASS, // e.g. 'my-user-password'
      database: process.env.DB_NAME, // e.g. 'my-database'
      host: dbSocketAddr[0], // e.g. '127.0.0.1'
      port: dbSocketAddr[1], // e.g. '5432'
    },
    // ... Specify additional properties here.
    ...config,
  });
};

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接