首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PostgREST on Google :格式?

PostgREST on Google :格式?
EN

Stack Overflow用户
提问于 2020-03-05 11:40:39
回答 4查看 1.9K关注 0票数 8

你们中有谁有过PostgREST和Cloud的经验吗?

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

现在我想从同一个项目的实例中运行Postgrest,但是我找不到支持Cloud格式的Postgrest URI格式,因为Google只使用像/cloudsql/INSTANCE_CONNECTION_NAME这样的unix套接字

Config 1

代码语言:javascript
复制
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"}

Config 2

代码语言:javascript
复制
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"}

Config 3

代码语言:javascript
复制
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":无效参数t(文件名、目录名或卷标签语法不正确)。

文档

云SQL文档

PostgREST

环境

  • PostgreSQL版本:11
  • PostgREST版本: 6.0.2
  • 操作系统: Win10和阿尔卑斯
EN

回答 4

Stack Overflow用户

发布于 2020-11-11 14:37:01

首先,必须将Cloud连接添加到云运行实例:https://cloud.google.com/sql/docs/postgres/connect-run#configuring

之后,在路径/cloudsql/<cloud_sql_instance_connection_name>的Unix域套接字上的服务中将提供DB连接,您可以设置PGRST_DB_URI环境变量来反映这一点。

以下是正确的格式:postgres://<pg_user>:<pg_pass>@/<db_name>?host=/cloudsql/<cloud_sql_instance_connection_name>

例如postgres://postgres:postgres@/postgres?host=/cloudsql/project-id:zone-id-1:sql-instance

票数 3
EN

Stack Overflow用户

发布于 2020-03-19 16:06:14

根据与CloudSQL连接,示例如下:

# postgres+pg8000://<db_user>:<db_pass>@/<db_name>?unix_sock=/cloudsql//.s.PGSQL.5432

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

代码语言:javascript
复制
db-uri = "postgres://postgres:password@/mydatabase?unix_socket=/cloudsql/INSTANCE_CONNECTION_NAME/.s.PGSQL.5432"

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

代码语言:javascript
复制
ProjectID:Region:DatabaseName

例如:myproject:myregion:myinstance

无论如何,您可以在这里找到从外部应用程序连接来自谷歌云的更多选项。

票数 1
EN

Stack Overflow用户

发布于 2020-07-28 10:49:45

我尝试了许多变体,但无法让它在盒子里工作,但是我会发布这个解决方案。

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

在任何情况下,正如@Steve_Chávez所提到的,这种方法确实工作db-uri = postgres:///user:password@/dbname,默认为postgrest默认套接字位置(/run/postgresql/.s.PGSQL.5432)。因此,在对接入口点,我们可以将这个位置符号链接到云运行注入的实际套接字。

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

代码语言:javascript
复制
RUN mkdir -p /run/postgresql/ && chown postgrest:postgrest /run/postgresql/

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

代码语言:javascript
复制
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

将Dockefile入口点更改为CMD /etc/entrypoint.sh。然后在云运行中将CLOUDSQL_INSTANCE_NAME添加为env。PGRST_DB_URI env var类似于so postgres://authenticator:password@/postgres

如果您不喜欢这种方式,另一种方法是通过无服务器vpc连接器进行连接。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60544602

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档