问题标签 [postgraphile]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
174 浏览

postgresql - 查询关联表PK上的多:多关系(即按关联表列过滤)

我有 2 个表之间的多:多关系:notetag,并且希望能够通过它们的tagId. 因为很多:很多我有一个连接表note_tag

我的目标是在我可以查询的 Postgraphile 生成的 Graphql 模式上公开一个计算字段,以及note表的其他属性。

我在玩弄postgraphile-plugin-connection-filter。这个插件可以通过 authorId (这将是 1:many)之类的东西进行过滤,但我无法弄清楚如何通过 many:many 进行过滤。我的笔记表上有一个名为 的计算列tags,它是 JSON。有没有办法“查看”这个 json 并找出 id = 1 的位置?

这是我的计算列tags

正如我理解上面的函数,我返回 jsonb,基于给定的 tagid (给函数): inner join note_tag on note_tag.tag_id = tagidid那么为什么在计算列时没有过滤 json呢?

我正在尝试进行这样的查询:

但是现在当我执行这个查询时,我会在tags字段中返回字符串化的 JSON。但是,所有标签都包含在 json 中,无论注释是否实际上属于该标签。

例如,这个 id = 1 的笔记应该只有 id = 1 和 id = 2 的标签。现在它返回数据库中的每个标签

这个计算列的关键因素是 JSON 必须包含笔记所属的所有标签,即使我们在单个上搜索笔记tagid

这是我的简化表...

笔记:

标签:

注意标签:

更新

我正在稍微改变方法,并且正在玩弄以下功能:

我能够检索tags填充字段的所有笔记,但现在我需要能够过滤掉不属于特定标签的笔记,同时仍然保留属于给定笔记的所有标签。

所以问题还是和上面一样:我们如何根据相关表的 PK 过滤表?

0 投票
1 回答
349 浏览

postgresql - 按计算结果排序(带输入)

一些上下文:

我的表有两列,经度和纬度。我希望能够创建一个查询,该查询可以接收经度、纬度和表示最大公里数距离的数字的输入。

查询将返回按结果距离排序的该距离内的行。

我已经看到自定义条件的选项很少,但这可能很hacky......我想也许有一种方法可以做到这一点并使用生成的构建order byPostGraphile但我是否有办法将变量传递给的顺序。

问题:

什么是最好的PostGraphile

提前致谢!

0 投票
1 回答
234 浏览

angular - 角度/图形和 CORS

我只是花了一天多的时间试图理解这一点。我正在从事一个新的爱好项目,并想学习 GraphQL。这是我目前的设置:

服务器:

  • PostGreSQL 数据库(码头工人)
  • 图形服务器(docker)
  • 通过 docker-compose 配置,两个镜像都运行在同一个物理服务器上,但是有不同的端口。

客户:

  • 角前端
  • 通过 apollo-angular 包的 Apollo 客户端
  • 目前在 dev 中,所以 host = localhost

我可以毫无问题地通过邮递员调用我的 API。但是,当我从客户端运行代码时,我得到了预期的“Access-Control-Allow-Origin 不允许 Origin http://localhost:4200”。错误。

这是我的 docker-compose.yml:

如您所见,我的服务器上启用了 CORS(通过 --cors 选项)。但是,错误仍然存​​在。老实说,我不知道如何调试或分析这个问题。我还需要在前端配置一些东西吗?

0 投票
2 回答
316 浏览

postgresql - 使用行级安全性 (RLS) 时如何使 INSERT ... RETURNING 语句起作用?

您可以在下面找到针对我在使用 RLS 管理对分层数据结构的访问的系统中遇到的问题的最小测试用例的代码。我正在使用 Postgres v11。

在我拥有的代码中units,这是一个顶级对象。unitssubunits1-n 的关系。

还有users,其中一个可以通过表user访问多个。unitsunit_owner

RLS 策略旨在让user新的插入subunitsunits他拥有的。

所有这一切都可以正常工作,直到代码中的第二行。

但这是我的问题:该数据库是通过 GraphQL 中间件(Postgraphile)公开的,该中间件需要通过该INSERT ... RETURNING功能插入返回的结果。

从最后一个插入语句中可以看出,这不起作用,它得到“错误:新行违反行级安全策略”。

问题似乎源于 RETURNING 需要选择权限这一事实,并且选择策略功能是使用插入之前subunit可用的 id集评估的,而不是在 之后

任何关于如何让我的用户将子单元插入其单元的提示将不胜感激!

0 投票
2 回答
520 浏览

postgresql - 如何使用 Postgraphile 或替代方案在 Postgres 中实现复杂的基于权限的数据访问

对于一个新项目,我们目前正在设计一个数据库和一个 API 来访问它。我们已经确定我们将使用 PostgresQL 作为数据库,并希望通过 GraphQL API 访问它。

为了简化可维护性,我们研究了客户端/API/数据库之间的几个中介,主要是 Prisma、PostGraphile 和 Hasura。PostGraphile 脱颖而出,因为它易于使用,并且专注于处理“在数据库中”而不是在后端代码中的内容。但是,在弄清楚如何实现这一点时,我们遇到了问题。

请允许我扩展我们迄今为止的设计:


临时数据库设计:

  • users桌子
  • groups桌子
  • roles桌子:
  • u_g_r表:一个用户可以是多个组的一部分,并且每个组可以有多个角色。该表表示和的外键users,因为多对多关系几乎可以存在于所有组合中。groupsroles

数据权限:

我们希望用户通过几个步骤授予其他人访问其个人数据的权限,最好是针对每个组。例如:

  • 3级:你自己,只有绝对必要的人,比如客户经理
  • 2级:只有X、Y等组的人
  • 1级:所有人

如果可以为各种类型的数据设置此项,那就太棒了,例如为您的电话号码授予第 2 级,但为您的实际地址授予第 1 级。因此,这些级别(1、2、3)将伴随数据库中的数据,例如phone_numberphone_number_access_level。然后,在联结表中,//u_g_r的每个组合都会附加一个允许的级别,该级别必须高于相关数据所需的级别。因此,如果您允许访问级别 2 上的数据,您将能够查看级别 1 和级别 2 上的数据,但不能查看级别 3。usergrouprolerole


Postgres 允许列和行级别的安全性,让用户访问某些数据。PostGraphile wiki 详细介绍了(此处此处)如何使用 JWT 声明而不是 PostGres 角色来完成这项工作。当我们想要实现上述功能时,我们的问题就来了。似乎我们想要一种不存在的“现场级安全”,但我无法想象其他人没有遇到同样的问题。

你会建议我们做什么?请让我知道是否有我们遗漏的选项,或者是否有其他更适合我们的选项!

在数据库之外,在后端代码中实现这一点可能是最简单的方法,但它极大地影响了我们的可维护性,因为像 PostGraphile 这样的东西对我们来说主要的奢侈是消除了我们自己编写 GraphQL 模式和解析器的需要。

0 投票
2 回答
382 浏览

angular - 如何 Graphql Observable 对数组的响应

如何将 postgraphile 响应转换为 ng 数组?

我的 graphqlclient 查询是:

这是我的回复:(**** let gimsData=client.request(query) *****)

在我的 page.html

TypeError:您在预期流的位置提供了无效对象。您可以提供 Observable、Promise、Array 或 Iterable。

我想我需要管道(地图)或订阅gimsData。在这里感到困惑。谢谢你

0 投票
1 回答
226 浏览

postgresql - Postgraphile -- makeExtendSchemaPlugin 将查看器类型添加到模式 -- Relay/Postgres

我是 Relay、GraphQL 和 Postgres 的新手,我正在尝试扩展 PostGraphile 创建的自动生成模式,以包含作为 Relay 的主要内容的查看器类型。

他们文档中的示例可能足以让大多数人使用,但我在充实它时遇到了麻烦。我基本上希望它为viewer: Viewer!每个类型添加一个字段。

任何帮助都是极好的。

我的数据库有一个 public.person 表和一个 private.person_account 表,但我犹豫要重命名其中一个查看器。

0 投票
1 回答
89 浏览

javascript - 从 postgraphile GraphQL 程序生成的查询/突变

我不相信这有什么大不了的,但我的 GraphIQL 从我的 PSQL 模式生成所有查询和突变。对于我可以直接在我的项目中使用的每个更改,是否可以为我提供一个通用文件?由于目前我必须手动编写我的查询/突变,如下所示,并且我经常更改架构,然后必须更新我的所有实例。

0 投票
0 回答
18 浏览

docker - Graphile/starter, docker 模式——改变没有反映在浏览器中?

我是 docker 开发和在 docker 模式下尝试 Graphile/starter 的新手。我已经启动并运行没有任何问题,并且我已经在 VSCode 容器中打开了项目。

我可能很愚蠢的问题是,为什么我的 HMTL 或 sass 更改没有反映在浏览器中。看来我必须停止并重新启动项目才能看到更改(?)

0 投票
1 回答
318 浏览

android - xxx 0 未知错误的 Http 失败响应

PostGraphile v4.9.2 服务器监听端口 5001

‣ GraphQL API:http://0.0.0.0:5001/ graphql

我怎样才能将http更改为https。我的意思是,我想要https://0.0.0.0:5001/graphql

因为,我在为 android 调试我的离子电容器应用程序时遇到错误

E/Capacitor/Console:文件:http://localhost/vendor-es2018.js - 第 41539 行 - 消息:错误错误:http://mydomain.com:5001/graphql 的 Http 失败响应:0 未知错误

我认为这是关于 http 问题,但如您所见,这是未知错误。提前致谢