Google cloud sql 谷歌云上的PostgREST SQL:unix套接字URI格式?
你们中有谁有PostgREST和CloudSQL的经验吗 我已经为我的SQL实例准备好了开放访问(0.0.0.0/0),我可以使用云代理应用程序通过本地PostGREST访问它 现在我想从同一个项目的实例运行Postgrest,但是 我找不到支持云SQL格式的Postgrest URI格式,如下所示 Google SQL Cloud仅使用unix套接字,如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
/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