bla*_*nik 5 postgresql dart google-cloud-sql google-cloud-run
我在 Google Cloud 中部署了一个 PostgreSQL 数据库,我试图从 Cloud Run 实例连接到该数据库。我尝试了以下两个包,它们最终都导致了相同的异常:
我得到的例外是:
SocketException: Failed host lookup: '/cloudsql/{INSTANCE_CONNECTION_NAME}' (OS Error: Name or service not known, errno = -2)
我在尝试建立连接时两次都到这里,所以在第一个包的情况下:
connection = new PostgreSQLConnection(
'/cloudsql/{INSTANCE_CONNECTION_NAME}',
5432,
'postgres',
username: 'username',
password: 'password');
await connection.open(); // <-- exception thrown here
Run Code Online (Sandbox Code Playgroud)
我曾尝试将主机字符串更改为/cloudsql/INSTANCE_CONNECTION_NAME}/.s.PGSQL.5432
,但这不起作用。我首先想到的是权限,Cloud Run 实例使用的服务帐户 (xxx-compute@developer.gserviceaccount.com) 具有该Cloud SQL Editor
角色(也尝试过 Client 和 Admin)。
从 dart 控制台应用程序在本地运行相同的数据库代码,我可以通过它的公共 IP 地址连接到我的数据库作为带有两个包的主机,因此数据库本身已启动并正在运行。
有人可以通过此异常为我指出正确的方向/有上述任何包的示例代码,以展示如何将其从 Cloud Run 连接到 Cloud SQL 实例?
编辑:我尝试在本地设置代理以测试连接是否错误,如下所示:
.\cloud_sql_proxy.exe -instances={INSTANCE_CONNECTION_NAME}=tcp:5433 psql
Run Code Online (Sandbox Code Playgroud)
然后将代码中的连接主机值更改为localhost
,并将端口更改为5433
。令我惊讶的是它有效 - 所以从本地我似乎能够使用该连接字符串连接到数据库。但是,当我从 Cloud Run 实例使用它时,它仍然不起作用。任何帮助表示赞赏!
看来dart不支持通过unix套接字连接,你需要配置一个IP(公共或私有,根据你的需要)。
或者你可以使用支持unix套接字连接的pg
希望这可以帮助。
归档时间: |
|
查看次数: |
394 次 |
最近记录: |