【发布时间】:2020-03-05 11:40:39
【问题描述】:
你们中的任何人都有 PostgREST 和 Cloud SQL 方面的经验吗?
我的 SQL 实例已准备好开放访问 (0.0.0.0/0),我可以使用云代理应用程序通过本地 PostGREST 访问它。
现在我想从同一个项目的一个实例中运行 Postgrest,但是
我找不到支持 Cloud SQL 格式的 Postgrest URI 格式,如
Google SQL Cloud 仅使用像 /cloudsql/INSTANCE_CONNECTION_NAME 这样的 unix 套接字
配置 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
返回{"details":"could not translate host name \"unix(\" to address: Unknown host\n","code":"","message":"Database connection error"}
配置 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
解析器拒绝问号
{"details":"invalid URI query parameter: \"unix_socket\"\n","code":"","message":"Database connection error"}
配置 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_CONNECTION_NAME 尝试删除文件,如 `postgrest.exe: /cloudsql/INSTANCE_CONNECTION_NAME: DeleteFile "/cloudsql/INSTANCE_CONNECTION_NAME": invalid argument t(文件名、目录名或卷标语法不正确。)
文档
云 SQL 文档
PostgREST
- http://postgrest.org/en/v6.0/configuration.html
- https://github.com/PostgREST/postgrest/issues/1186
- https://github.com/PostgREST/postgrest/issues/169
环境
- PostgreSQL 版本:11
- PostgREST 版本:6.0.2
- 操作系统:Win10 和 Alpine
【问题讨论】:
-
你试过了吗:
postgres//<db_user>:<db_pass>@/<db_name>?unix_sock=/cloudsql/<cloud_sql_instance_name>/.s.PGSQL.5432,或者host而不是unix_sock -
试试看:
db-uri = postgres:///user@/dbname(无密码)。此外,server-unix-socket 只是一个网络服务器设置,而不是一个 pg 连接设置。我建议先尝试使用psql <db-uri>的连接字符串。如果 db-uri 正确,它也可以与 PostgREST 一起使用。 -
你得到这个工作了吗@j-dumont?我尝试了 steve chavez 方法,但默认为
/var/postgresql/.s.PGSQL.5432但我找不到自定义套接字位置的方法,因为该位置是由 cloudrun 硬编码的。
标签: google-cloud-sql unix-socket postgrest