gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 02:42:11 25 4
gpt4 key购买 nike

我在 Google Cloud 中部署了一个 PostgreSQL 数据库,我试图从 Cloud Run 实例连接到该数据库。我尝试了以下两个包,它们最终都导致了相同的异常:

  • https://pub.dev/packages/postgres
  • https://pub.dev/packages/database_adapter_postgre

  • 我得到的异常(exception)是: 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
    我尝试将主机字符串更改为 /cloudsql/INSTANCE_CONNECTION_NAME}/.s.PGSQL.5432 ,但这没有用。我的第一个想法是权限,Cloud Run 实例正在使用的服务帐户 (xxx-compute@developer.gserviceaccount.com) 具有 Cloud SQL Editor角色(也尝试过客户端和管理员)。
    从 dart 控制台应用程序本地运行相同的数据库代码,我可以通过它的公共(public) IP 地址连接到我的数据库作为具有两个包的主机,因此数据库本身已启动并正在运行。
    有人可以为我指出这个异常的正确方向/有上面任何包的示例代码,以显示如何将它连接到 Cloud Run 中的 Cloud SQL 实例?
    编辑 :
    我尝试在本地设置代理以测试连接是否错误,如下所示:
    .\cloud_sql_proxy.exe -instances={INSTANCE_CONNECTION_NAME}=tcp:5433 psql
    然后将代码中的连接主机值改为 localhost ,以及到 5433 的端口.
    令我惊讶的是它可以工作 - 所以从本地我似乎能够使用该连接字符串连接到数据库。但是,当我从 Cloud Run 实例中使用它时,它仍然不起作用。任何帮助表示赞赏!

    最佳答案

    dart 似乎不支持通过 unix socket 连接,您需要配置一个 IP(公共(public)或私有(private),根据需要)。
    或者,您可以使用 pg支持unix socket connection
    希望这可以帮助。

    关于postgresql - 如何从 dart 代码连接到 Cloud PostgreSQL 数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62611172/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com