You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js TypeORM连接Google Cloud SQL PostgreSQL实例出现连接错误求助

问题描述

连接Google Cloud SQL PostgreSQL实例时遭遇以下错误:
caught error @ main Error: connect ENOENT /cloudsql/<PROJECT ID>:us-central1:<DB NAME>/.s.PGSQL.5432

同时用Postico 2通过连接URL连接时,收到错误:Hostname not found.

已确认Google项目已启用Cloud SQL API,TypeORM配置代码如下:

const config2 = {
  database: <DB NAME>,
  entities: Object.values(entities),
  host: '/cloudsql/<project id>:us-central1:<db name>',
  extra: {
    socketPath: '/cloudsql/<project id>:us-central1:<db name>',
  },
  password: ...,
  port: 5432,
  type: process.env.POSTGRES_CONNECTION as DatabaseType,
  username: ...,
  synchronize: false,
  dropSchema:
    process.env.NODE_ENV !== 'production' &&
    process.env.POSTGRES_DROP_SCHEMA === 'true',
  migrations: ['dist/migrations/*.js'],
  migrationsRun: true,
  cache: shouldCache(),
} as PostgresConnectionOptions;
解决方案

1. 确保Cloud SQL代理正常运行(本地开发必做)

本地环境下,Unix套接字路径/cloudsql/...不会自动存在,必须启动Cloud SQL Auth代理才能生成该路径:

  • 下载代理后,执行启动命令:
    ./cloud-sql-proxy <PROJECT ID>:us-central1:<DB NAME>
    
    代理运行后才会在本地创建对应的套接字文件,否则会触发ENOENT错误。

如果是在GCE、Cloud Run、App Engine等云环境部署:

  • 确认服务账号已配置「Cloud SQL客户端」角色
  • 检查实例的连接授权规则,确保当前服务账号被允许连接目标实例
  • 云平台会自动注入套接字路径,无需手动启动代理,但要保证实例连接名完全正确

2. 修正TypeORM配置冗余项

PostgreSQL的TypeORM配置不需要同时设置host和socketPath,二者保留其一即可,推荐只保留extra.socketPath并删除host配置:

const config2 = {
  database: <DB NAME>,
  entities: Object.values(entities),
  // 移除host配置
  extra: {
    socketPath: '/cloudsql/<project id>:us-central1:<db name>',
  },
  password: ...,
  port: 5432,
  type: process.env.POSTGRES_CONNECTION as DatabaseType,
  username: ...,
  synchronize: false,
  dropSchema:
    process.env.NODE_ENV !== 'production' &&
    process.env.POSTGRES_DROP_SCHEMA === 'true',
  migrations: ['dist/migrations/*.js'],
  migrationsRun: true,
  cache: shouldCache(),
} as PostgresConnectionOptions;

同时确认<project id>、<db name>等占位符已替换为实际值,无拼写错误。

3. 解决Postico 2连接问题

Postico 2不支持直接通过Unix套接字路径连接Cloud SQL,换以下方式连接:

  • 先启动Cloud SQL Auth代理
  • 在Postico 2中,主机填localhost,端口填5432,再填入对应的用户名、密码和数据库名
  • 确保代理运行时指定了正确的实例连接名,且本地5432端口未被其他服务占用

4. 核对实例连接名

登录Google Cloud控制台,进入目标Cloud SQL实例详情页,复制官方给出的实例连接名,确保配置和Postico连接时使用的名称完全一致(格式为PROJECT_ID:REGION:INSTANCE_NAME,无多余符号或拼写错误)。

5. 检查网络与防火墙配置

  • 如果用公网IP连接而非代理,确认本地IP已添加到Cloud SQL实例的「授权网络」列表中
  • 云环境部署的话,检查VPC网络配置,确保实例与服务处于允许通信的网络范围内

内容的提问来源于stack exchange,提问作者Brace Sproul

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 20:20:54