如何从 dart 代码连接到 Cloud PostgreSQL 数据库?

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 实例使用它时,它仍然不起作用。任何帮助表示赞赏!

Dan*_*cci 3

看来dart不支持通过unix套接字连接,你需要配置一个IP(公共或私有,根据你的需要)。

或者你可以使用支持unix套接字连接的pg

希望这可以帮助。

  • 不抱歉@blas3nik,您可以尝试打开功能请求问题...同时您可以为数据库配置公共或私有IP并通过它进行连接。希望这可以帮助 (2认同)