Quarkus中Google Cloud SQL的PostgreSQL JDBC URL配置问题
解决Google Cloud SQL PostgreSQL + Quarkus部署时"数据库不存在"的问题
核心结论
quarkus.datasource.jdbc.url中的XXX是你在Google Cloud SQL PostgreSQL实例中已创建的数据库名称,既不是实例的公网IP,也不是连接名。
原因说明
因为你配置了Cloud SQL的PostgreSQL Socket Factory,这种连接方式采用Unix套接字而非TCP连接,所以JDBC URL格式为jdbc:postgresql:///数据库名:
///是固定写法,代表通过本地套接字连接,不需要填写主机地址- 实际的实例连接信息由
quarkus.datasource.jdbc.additional-jdbc-properties.cloudSqlInstance参数(project-id:gcp-region:instance)提供,不需要在URL中重复填写
排查与修正步骤
- 确认目标数据库存在:登录GCP控制台,进入你的Cloud SQL PostgreSQL实例,切换到「数据库」标签页,检查是否有名为
XXX的数据库。 - 创建缺失的数据库:如果数据库不存在,点击「创建数据库」,输入对应的名称(注意PostgreSQL默认区分大小写,名称要和配置完全一致)。
- 核对配置一致性:确保
quarkus.datasource.jdbc.url中的数据库名称和Cloud SQL中创建的完全匹配,包括大小写、特殊字符。
正确配置示例
假设你的Cloud SQL实例信息如下:
- 项目ID:
my-gcp-project - 区域:
us-central1 - 实例名:
quarkus-postgres-instance - 创建的数据库名:
quarkus_app_db - 数据库用户:
quarkus_user - 用户密码:
quarkus_pass
对应的配置应为:
quarkus.datasource.db-kind=other quarkus.datasource.jdbc.url=jdbc:postgresql:///quarkus_app_db quarkus.datasource.jdbc.driver=org.postgresql.Driver quarkus.datasource.username=quarkus_user quarkus.datasource.password=quarkus_pass quarkus.datasource.jdbc.additional-jdbc-properties.cloudSqlInstance=my-gcp-project:us-central1:quarkus-postgres-instance quarkus.datasource.jdbc.additional-jdbc-properties.socketFactory=com.google.cloud.sql.postgres.SocketFactory
额外注意事项
- 确保你使用的服务账号(对应
yyy.json)拥有Cloud SQL Client角色权限,能够访问目标Cloud SQL实例。 - 配置中的用户名和密码必须是Cloud SQL实例中已创建的数据库用户,而非GCP账号的用户名/密码。
内容的提问来源于stack exchange,提问作者Jan D.M.
相关产品推荐
相关产品推荐

