Google cloud sql 谷歌云上的PostgREST SQL:unix套接字URI格式?

Google cloud sql 谷歌云上的PostgREST SQL:unix套接字URI格式?,google-cloud-sql,unix-socket,postgrest,Google Cloud Sql,Unix Socket,Postgrest,你们中有谁有PostgREST和CloudSQL的经验吗 我已经为我的SQL实例准备好了开放访问(0.0.0.0/0),我可以使用云代理应用程序通过本地PostGREST访问它 现在我想从同一个项目的实例运行Postgrest,但是 我找不到支持云SQL格式的Postgrest URI格式,如下所示 Google SQL Cloud仅使用unix套接字,如/cloudsql/INSTANCE\u CONNECTION\u NAME 配置1 db-uri = "postgres://postgre

你们中有谁有PostgREST和CloudSQL的经验吗

我已经为我的SQL实例准备好了开放访问(0.0.0.0/0),我可以使用云代理应用程序通过本地PostGREST访问它

现在我想从同一个项目的实例运行Postgrest,但是 我找不到支持云SQL格式的Postgrest URI格式,如下所示 Google SQL Cloud仅使用unix套接字,如
/cloudsql/INSTANCE\u CONNECTION\u NAME

配置1

db-uri = "postgres://postgres:password@/unix(/cloudsql/INSTANCE_CONNECTION_NAME)/mydatabase"
db-schema = "api"
jwt-secret = "OOcJ7VoSY1mXqod4MKtb9WCCwt9erJkRQ2tzYmLb4Xe="
db-anon-role = "web_anon"
server-port=3000
返回
{“详细信息”:“无法将主机名\”unix(\”转换为地址:未知主机\n”,“代码”:“消息”:“数据库连接错误”}

配置2

db-uri = "postgres://postgres:password@/mydatabase?unix_socket=/cloudsql/INSTANCE_CONNECTION_NAME"
db-schema = "api"
jwt-secret = "OOcJ7VoSY1mXqod4MKtb9WCCwt9erJkRQ2tzYmLb4Xe="
db-anon-role = "web_anon"
server-port=3000
解析器拒绝问号
{“详细信息”:“无效的URI查询参数:\”unix\U套接字\“\n”,“代码”:“,”消息”:“数据库连接错误”}

配置3

db-uri = "postgres://postgres:password@/mydatabase"
db-schema = "api"
jwt-secret = "OOcJ7VoSY1mXqod4MKtb9WCCwt9erJkRQ2tzYmLb4Xe="
db-anon-role = "web_anon"
server-port=3000
server-unix-socket= "/cloudsql/INSTANCE_CONNECTION_NAME"
server unix socket
似乎只接受套接字锁定文件路径。将其馈送
/cloudsql/INSTANCE\u CONNECTION\u NAME
尝试删除文件,如`postgrest.exe:/cloudsql/INSTANCE\u CONNECTION\u NAME:DeleteFile:/cloudsql/INSTANCE\u CONNECTION\u NAME':无效参数t(文件名、目录名或卷标语法不正确。)

文档 云SQL文档

后期

环境

  • PostgreSQL版本:11
  • 最新版本:6.0.2
  • 操作系统:Win10和Alpine
    • 根据,示例如下:

      #postgres+pg8000://:@/?unix
      \u sock=/cloudsql/.s.PGSQL.5432

      然后您可以尝试(正如@marian.vladoi提到的):

      请记住,连接名称应包括:

      ProjectID:Region:DatabaseName
      
      例如:
      myproject:myregion:myinstance


      无论如何,您可以在这里找到更多的和选项。

      我尝试了许多变体,但无法使其开箱即用,不过我将发布此解决方法

      FWIW我能够在本地使用postgrest的备用套接字位置,但是当尝试使用cloudsql位置时,它似乎没有正确地解释它-可能套接字路径中的冒号正在抛出它

      正如@Steve_Chávez所提到的,在任何情况下,这种方法都是有效的postgres:///user:password@/dbname并默认为postgrest默认套接字位置(
      /run/postgresql/.s.PGSQL.5432
      )。因此,在docker入口点中,我们可以将此位置符号链接到Cloud run注入的实际套接字

      首先,将以下内容添加到(上面的
      USER 1000
      ):

      然后在
      /etc/entrypoint.bash
      处添加一个可执行文件,其中包含:

      set -eEux pipefail
      
      CLOUDSQL_INSTANCE_NAME=${CLOUDSQL_INSTANCE_NAME:-PROJECT_REGION_INSTANCE_NAME}
      POSTGRES_SOCKET_LOCATION=/run/postgresql
      
      ln -s /cloudsql/${CLOUDSQL_INSTANCE_NAME}/.s.PGSQL.5432 ${POSTGRES_SOCKET_LOCATION}/.s.PGSQL.5432 
      postgrest /etc/postgrest.conf
      
      将dockfile entrypoint更改为
      CMD/etc/entrypoint.sh
      。然后将
      CLOUDSQL\u实例\u NAME
      添加为云运行中的环境变量。
      PGRST\u DB\u URI
      环境变量类似于此
      postgres://authenticator:password@/博士后


      如果您不喜欢,另一种方法是通过连接。

      我也很难做到这一点

      我最终为DB-URI env变量做了一行程序

      host=/cloudsql/project-id:zone:instance-id user=user port=5432 dbname=dbname password=password
      
      但是,我在云上运行postgrest,它允许您通过指定实例连接名称

      实例\连接\名称=/cloudsql/项目id:zone:实例id

      也许你可以把它放在那里,然后你就不用服务器了。我不知道你现在在哪里运行它


      首先,您必须将云SQL连接添加到云运行实例:

      之后,可以为新部署设置
      PGRST\u DB\u URI
      环境变量

      以下是正确的格式:
      postgres://:@/?host=/cloudsql/

      e、 g。
      postgres://postgres:postgres@/postgres?host=/cloudsql/project id:zone-id-1:sql实例

      您是否尝试过:
      postgres/:@/?unix_sock=/cloudsql//.s.PGSQL.5432
      ,或者可能是
      host
      而不是
      unix_sock
      尝试一下:
      db uri=postgres:///user@/dbname
      (无密码)。此外,这只是一个Web服务器设置,而不是pg连接设置。我建议先用
      psql
      尝试连接字符串。如果db uri正确,它也可以与PostgREST一起使用。你是否在@j-dumont使用此方法?我尝试了steve chavez方法,但默认为
      /var/postgresql/.s.PGSQL.5432
      ,但我找不到方法自定义插座位置,因为位置由cloudrun硬编码。
      set -eEux pipefail
      
      CLOUDSQL_INSTANCE_NAME=${CLOUDSQL_INSTANCE_NAME:-PROJECT_REGION_INSTANCE_NAME}
      POSTGRES_SOCKET_LOCATION=/run/postgresql
      
      ln -s /cloudsql/${CLOUDSQL_INSTANCE_NAME}/.s.PGSQL.5432 ${POSTGRES_SOCKET_LOCATION}/.s.PGSQL.5432 
      postgrest /etc/postgrest.conf
      
      host=/cloudsql/project-id:zone:instance-id user=user port=5432 dbname=dbname password=password