Cloud Run部署的FastAPI连接Cloud SQL PostgreSQL报Connection refused错误
问题解决方案
你遇到的ConnectionRefusedError错误不是databases包异步特性本身的缺陷,核心是异步驱动和同步驱动的Unix域套接字配置规则不一致导致的:databases的PostgreSQL异步连接默认依赖asyncpg驱动,该驱动的参数规则和你同步场景使用的psycopg2、pg8000不同,之前适配同步驱动的连接字符串无法被asyncpg识别,导致驱动默认尝试连接本地TCP 5432端口,最终抛出连接拒绝错误。
解决步骤
- 先确认项目依赖中已经安装asyncpg,可在requirements.txt中添加如下内容:
asyncpg>=0.27.0
databases默认不会自带异步PostgreSQL驱动,需要单独安装。
2. 替换异步连接的连接字符串为适配asyncpg的格式,无需使用unix_sock参数,直接通过host参数传入Cloud SQL的Unix套接字路径即可,格式如下:
postgresql+asyncpg://<数据库用户名>:<数据库密码>@/<数据库名称>?host=/cloudsql/<GCP项目ID>:<实例所属区域>:<Cloud SQL实例名>
参考示例:
postgresql+asyncpg://dev_user:dev_pass@/order_db?host=/cloudsql/my-gcp-proj:us-east1:my-postgres
验证方法
本地启动Cloud SQL Auth Proxy并监听Unix域套接字,用上述格式的连接字符串测试异步连接,本地可连通的情况下部署到Cloud Run即可正常运行。
内容的提问来源于stack exchange,提问作者dbatten
相关产品推荐
相关产品推荐

