标签: postgrest

有没有办法使用对象引用从 Postgres 生成 OpenAPI/Swagger 定义?

我有一个使用supabase/postgres(t) 的rest api,它生成它自己的OpenAPI/Swagger 定义。问题是这仅包含 id 字段,但不包含对其他表的实际引用。

因此,当使用 openapi-generator 生成客户端时,类仅包含外键,而不包含实际的对象引用。

有没有办法生成带有引用的 openapi 定义,以便我可以带有引用生成我的类?

{
  "swagger": "2.0",
  "info": {
    "description": "standard public schema",
    "title": "PostgREST API",
    "version": "9.0.0.20220211 (pre-release) (dcf7ade)"
  },
  "host": "localhost:3000",
  "basePath": "/",
  "schemes": [
    "http"
  ],
  "consumes": [
    "application/json",
    "application/vnd.pgrst.object+json",
    "text/csv"
  ],
  "produces": [
    "application/json",
    "application/vnd.pgrst.object+json",
    "text/csv"
  ],
  "paths": {
    "/": {
      "get": {
        "tags": [
          "Introspection"
        ],
        "summary": "OpenAPI description (this document)",
        "produces": [
          "application/openapi+json",
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/hallo": …
Run Code Online (Sandbox Code Playgroud)

postgresql swagger postgrest openapi-generator supabase

8
推荐指数
0
解决办法
1612
查看次数

Google Cloud SQL 上的 PostgREST:unix 套接字 URI 格式?

有谁有使用 PostgREST 和 Cloud SQL 的经验吗?

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

现在我想从同一个项目的实例运行 Postgrest,但我找不到支持 Cloud SQL 格式的 Postgrest URI 格式,因为 Google SQL Cloud 只使用像 /cloudsql/INSTANCE_CONNECTION_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
Run Code Online (Sandbox Code Playgroud)

退货 {"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
Run Code Online (Sandbox Code Playgroud)

解析器拒绝问号 {"details":"invalid URI query parameter: \"unix_socket\"\n","code":"","message":"Database connection error"}

配置 3

db-uri = …
Run Code Online (Sandbox Code Playgroud)

unix-socket google-cloud-sql postgrest

6
推荐指数
1
解决办法
1066
查看次数

PostgREST - 在插入时添加经过身份验证的用户 ID

我需要在其中一列中自动添加插入行的作者。我正在使用 postgREST (使用 Supabase 云服务),并且我不希望用户添加他们想要的任何人作为作者。有没有办法自动添加发布数据的用户的用户ID?谢谢!

postgresql postgrest supabase supabase-database

6
推荐指数
2
解决办法
2262
查看次数

PostgREST 在子查询或 CTE 中使用限制和偏移量

我们在项目中使用 PostgREST 来处理一些相当复杂的数据库视图。

从某个时刻开始,当我们在子选择中使用限制和偏移(x 范围标头或查询参数)时,我们会得到非常长的响应时间。

从我们所读到的内容来看,这似乎是一个已知问题,postgresql 即使对于未请求的记录也会执行子选择。解决方案是稍微调整偏移量和限制,将其放入子选择或 CTE 表中。

是否有内部 GUC 值或类似的值可以在数据库视图中使用以优化响应时间?有人提示如何实现这一目标吗?

编辑:正如这里所建议的,有一些更多细节。假设产品和零件之间存在关系。我想知道每个产品的零件数量(这是我们公开的数据库视图的简化版本)。

有两种方法可以做到这一点

A. 子选择:

    SELECT products.id
            ,(
                    SELECT count(part_id) AS total
                    FROM parts
                    WHERE product_id = products.id
                    )
    FROM products limit 1000 OFFSET 99000
Run Code Online (Sandbox Code Playgroud)

B、热膨胀系数:

    WITH parts_count
    AS (
            SELECT product_id
                    ,count(part_id) AS total
            FROM parts
            GROUP BY product_id
            ORDER BY product_id
            )
    SELECT products.id
            ,parts_count.total
    FROM products
    LEFT JOIN parts_count ON parts_count.product_id = product.id 
    LIMIT 1000     
    OFFSET 99000
Run Code Online (Sandbox Code Playgroud)

A的问题是对每一行执行子选择,因此即使我只读取 1000 条记录,也有 100 000 个子选择。

B …

postgresql postgrest

5
推荐指数
1
解决办法
2573
查看次数

如何将 Nginx GET 请求重写为 POST?

我的用例是我有一封包含“验证您的电子邮件地址”链接的电子邮件。当用户单击此链接时,用户代理会执行 GET 请求,如下所示:

GET http://widgetwerkz.example.com/confirm_email?challenge=LSXGMRUQMEBO
Run Code Online (Sandbox Code Playgroud)

服务器将作为 POST 执行此操作(因为它是一个副作用操作)。我根本无权访问服务器代码。目标请求应该是:

POST http://widgetwerkz.example.com/rpc/verify

{ "challenge": "LSXGMRUQMEBO" }
Run Code Online (Sandbox Code Playgroud)

我可以执行什么 Nginx 重写来实现此目的?

编辑:上下文中的解决方案

http {
    server {
        # ... 
        location /confirm_email {
            set $temp $arg_challenge;
            proxy_method POST;
            proxy_set_body '{ "challenge": "$temp" }';
            proxy_pass http://127.0.0.1/rpc/verify;
            set $args '';
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这将所有这些结合在一起:

  • 将请求从 GET 转换为 POST
  • 将位置从 重写/confirm_email/rpc/verify
  • 从请求中删除查询字符串(例如,生成的 url 很简单/rpc/verify,没有?challenge=LSXGMRUQMEBO
  • 添加 JSON 正文:{ "challenge": "LSXGMRUQMEBO" }

感谢伊万让我走上正轨!

nginx postgrest

5
推荐指数
1
解决办法
4386
查看次数

PostgREST / PostgreSQL 无法放大字符串缓冲区消息

我在运行的 postgREST API 上遇到了无法放大字符串缓冲区消息。我猜想有些表太大而无法成功使用 API。

\n\n

我正在使用来自https://hub.docker.com/r/postgrest/postgrest的 docker postgrest/postgrest 容器, 版本为 PostgREST 5.1.0。

\n\n

一切都按预期工作,但如果表大小变得太大,我会收到以下错误消息。

\n\n
hint    null\ndetails "Cannot enlarge string buffer containing 1073741822 bytes by 1 more bytes."\ncode    "54000"\nmessage "out of memory"\n
Run Code Online (Sandbox Code Playgroud)\n\n

我无法确定阈值何时工作或不工作。\n是否有可能扩大某些配置文件中的字符串缓冲区,或者这是硬编码的?

\n\n

使用 API 的表大小是否有任何限制?到目前为止我无法\xe2\x80\x99在文档中找到任何信息。

\n\n

===========更新

\n\n

postgres 日志给了我以下 SQL 查询:

\n\n
WITH pg_source AS (\n  SELECT "public"."n_osm_bawue_line".* \n  FROM "public"."n_osm_bawue_line"\n) \nSELECT null AS total_result_set, \n       pg_catalog.count(_postgrest_t) AS page_total, \n       array[]::text[] AS header, \n       coalesce(json_agg(_postgrest_t), \'[]\')::character varying AS body \nFROM ( \n  SELECT * …
Run Code Online (Sandbox Code Playgroud)

postgresql postgrest

3
推荐指数
1
解决办法
1万
查看次数

您如何指定 DB_URI postgres DB 连接字符串到在 Google Sql 云中运行的实例?

这是我的场景。我已经设置了一个在 Google SQL 云中运行的 Postgres DB 实例。它已启动并正在运行,如果我将本地 IP 列入白名单,我可以毫无问题地直接连接。

然后我部署了一个 docker 容器 (postGrest),它是一个连接到 postgres 数据库的 Web 服务器。当我在 Google Cloud Run 上配置它时,它确实有一个下拉选项,我可以在其中指定数据库连接,它说,在幕后,它为此连接配置 Cloud SQL 代理。

容器允许传入环境变量以指定哪个服务器等。一个必需的参数是 postgred 实例的 DB_URI。在本地运行时,它看起来像这样:

postgres://authenticator:mysecretpassword@localhost:5432/testdb

当我尝试在云版本上配置它时,我尝试使用 IP 127.0.0.1(谷歌云 SQL 代理文档说这是通过代理连接的方式)。这没有用。

然后我尝试使用分配给 postgres 数据库的公共 IP ......这也不起作用。

有谁知道如何使用这种 DB_URI 格式指定正确的连接字符串?

postgresql google-cloud-sql google-cloud-platform postgrest google-cloud-run

3
推荐指数
2
解决办法
1043
查看次数

postgresql中NOLOGIN用户的用途是什么?

我试图了解PostgREST教程的初始步骤。

在提到的教程中,建议创建两个名为web_anonauthenticationator 的不同角色,如下所示:

create role web_anon nologin;

grant usage on schema api to web_anon;
grant select on api.todos to web_anon;

create role authenticator noinherit login password 'mysecretpassword';
grant web_anon to authenticator;
Run Code Online (Sandbox Code Playgroud)

据我所知,PostgREST 服务器接收来自客户端的 Rest API 请求,没有关于用户(角色)的任何信息。而且,据我所知,nologin 角色不能登录数据库。(他们可以发送查询吗?)

所以问题是:

  1. 为什么我们需要两个不同的角色?web_anon 的作用是什么,authenticator 的作用是什么?

  2. nologin角色在 postgres 中可以做什么?

  3. 当 PostgREST 收到一个 rest API 查询时,它使用哪个用户向数据库发送和执行该查询?

postgresql postgrest

2
推荐指数
1
解决办法
1619
查看次数

ember-data保存并找到postgrest

如果我们必须将ember-data及其save()和find()方法与postgrest样式的REST调用集成,那么ember-data本身就能理解json-api,我们需要在哪里进行更改?

我们是否需要在ember或某些服务器端逻辑中修改客户端,以便与ember-data要求进行映射.

因此,最后的REST api调用看起来像是从相关表格中获取电影及其标题和competition.name - >

http://localhost:3001/film?select=title,competition{name}
http://localhost:3001/users?select=email::text&id=eq.2&sign_in_count=eq.16
Run Code Online (Sandbox Code Playgroud)

ember.js ember-data postgrest

1
推荐指数
1
解决办法
131
查看次数

PostgREST 返回 JSON 对象的非空值

我有一个包含三列的 postgrSQL 表,其中一列是 json 字段:

  id [num]  ||  school [char]   ||  info [json]
============================================================================
   1        ||   1st            || [{"fistname": "Bill", "Lastname": "Maison"}]
   2        ||   2nd            || [{"fistname": "John", "Lastname": "Handson"}]
   3        ||   3rd            || []
 
Run Code Online (Sandbox Code Playgroud)

我想用 postgREST 过滤空信息字段。

我现在的网址: https://127.0.0.1/table?&info->0->firstname=is.null

这实际上返回所有空值,但我该如何以其他方式做到这一点呢?排除所有空值?

javascript postgresql node.js postgrest

1
推荐指数
1
解决办法
916
查看次数

在一个 SQL 视图中返回三个 SQL 查询的结果

是否可以在一个视图中返回三个独立 SQL 查询的结果?

我想创建一个“初始数据”视图,其中包含数据库中的一些统计信息,从不同的表返回三个 counts() 。像这样的东西:

CREATE VIEW initial AS
   SELECT count(*) AS albums_count FROM albums,
   SELECT count(*) AS artists_count FROM artists,
   SELECT count(*) AS tracks_count FROM tracks;
Run Code Online (Sandbox Code Playgroud)

我不介意结果是在行还是列中。UNION会有点工作 - 但从性能的角度来看它没有意义。

(我知道我可以从前端执行三个单独的请求,或者将其合并到我的后端代码中,但我使用 PostgREST 作为我的 API,并且我不想在网站加载时发出 3 个单独的“初始”请求。)

sql postgresql postgrest

1
推荐指数
1
解决办法
186
查看次数