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

无法连接Cloud SQL Proxy求助(Kubernetes+Elixir/Phoenix场景)

解决Cloud SQL Proxy + psql连接失败的问题

你的报错根源很明确:psql的-h参数传错了路径——你把Cloud SQL Proxy创建的socket文件路径传给了-h,但psql会把这个路径当成目录,试图在里面找PostgreSQL默认的socket文件(.s.PGSQL.5432),可这个路径实际上是一个socket文件而非目录,所以才会报Not a directory错误。

这里给你两种简单的解决办法,选一种适合你的就行:


方法1:改用TCP端口连接(推荐,更直观)

先停止当前运行的Cloud SQL Proxy,然后用TCP端口模式重新启动:

cloud_sql_proxy -instances=instance-id:region:instance-name=tcp:5432

接着在另一个终端执行psql命令:

psql -U postgres -h localhost

这种方式完全避开了Unix socket的路径问题,后续给Phoenix项目配置数据库连接也更简单(直接用localhost:5432即可)。


方法2:修正Unix socket的psql命令

如果你坚持要用Unix socket方式,需要让psql直接连接到Proxy创建的socket文件,而不是把它当作目录。可以用PostgreSQL的连接字符串格式执行命令:

psql "host=/tmp/cloudsql/instance-id:region:instance-name user=postgres dbname=postgres"

额外的权限检查(避免后续坑)

你之前执行的chmod +x /tmp/cloudsql其实不对——目录需要的是读写执行权限,正确的权限设置应该是:

chmod 777 /tmp/cloudsql

这不是你当前报错的直接原因,但确保权限正确可以避免后续出现连接权限不足的问题。

顺带提下Phoenix项目的配置调整

如果用TCP方式,你的数据库配置(比如config/dev.exs)应该改成这样:

config :my_app, MyApp.Repo,
  username: "postgres",
  password: "你的数据库密码",
  database: "my_app_dev",
  hostname: "localhost",
  port: 5432,
  pool_size: 10

如果用Unix socket方式,配置需要指定socket参数:

config :my_app, MyApp.Repo,
  username: "postgres",
  password: "你的数据库密码",
  database: "my_app_dev",
  socket: "/tmp/cloudsql/instance-id:region:instance-name",
  pool_size: 10

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 18:37:34