提问者:小点点

Postgresql-错误连接由于连接超时而终止


我在google cloud中创建了一个google cloud函数,它将连接到我在google cloud中创建的postgresql实例。

我正在使用'pg'节点模块。

我已经为此创建了一个私有IP。

我收到以下错误:

错误:由于在timeout.ConnectionTimeouthAndle.SetTimeout(/workspace/node_modules/pg/lib/client.js:106:28)在ontimeout(Timers.js:436:11)在tryOnTimeout(Timers.js:300:5)在listOnTimeout(Timers.js:263:5)在Timer.ProcessTimers(Timers.js:223:10)处的连接超时,连接终止

在谷歌云中尝试查询数据库时。

这是我在谷歌云功能中使用的配置。

{“host”:“”,“user”:“”,“pw”:“”,“db”:“”,“port”:“5432”,“table”:“

请帮帮我


共1个答案

匿名用户

根据官方文件:

从Cloud Functions连接到Cloud SQL

要使用私有IP直接连接,您需要:

1.确保上面创建的云SQL实例有私有IP地址。如果需要添加一个,请参阅配置专用IP页获取说明。

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

3.配置云功能使用连接器。使用实例的专用IP和端口5432进行连接。

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

您还可以找到节点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,
  });
};