GraphQL-无法更新表行

GraphQL-无法更新表行,graphql,postgraphile,Graphql,Postgraphile,假设我有一个具有属性id和name的table Person。GraphQL服务器都是通过Postgraphile设置的,我可以查询并创建新条目。但是,我无法更新它。我一次又一次地挠头,仍然找不出原因 这就是我尝试过的突变,时不时地让我失败 mutation($id: Int!, $patch: PersonPatch!) { updatePersonById(input: { id: $id, patch: $patch }) { clientMutationId } } 变

假设我有一个具有属性
id
name
的table Person。GraphQL服务器都是通过
Postgraphile
设置的,我可以查询并创建新条目。但是,我无法更新它。我一次又一次地挠头,仍然找不出原因

这就是我尝试过的突变,时不时地让我失败

mutation($id: Int!, $patch: PersonPatch!) {
  updatePersonById(input: { id: $id, patch: $patch }) {
    clientMutationId
  }
}
变量

{
    id: 1, 
    patch: {"name": "newname"}
}
我正在使用Altair GraphQL客户端提交突变请求,返回的错误消息是“由于未找到值,集合‘人员’中未更新任何值。”

id=1
的人确实存在,通过发送查询
personById
以获取其姓名来确认。但我就是不能更新他的名字

编辑#1 下面是Altair GraphQL客户端生成的gql

updatePersonById(
  input: UpdatePersonByIdInput!
): UpdatePersonPayload


input UpdatePersonByIdInput {
  clientMutationId: String
  patch: PersonPatch!
  id: Int!
}

input PersonPatch {
  id: Int
  name: String
}

假设您使用的是行级安全性(RLS),那么要更新的行似乎没有通过当前已验证用户所需的安全策略

这里有一个小例子;您需要调整它以适应您自己的权限系统

创建表人物(id序列主键,名称文本);
alter table person启用行级安全性;
向graphql授予选择、插入(姓名)、更新(姓名)、删除人员权限;
创建策略select_all on person以供选择使用(true);
为带复选框的插入创建策略“全部在人身上插入”(true);
使用(id=current_person_id())为更新创建策略更新_self on person;
使用(id=current_person_id())创建用于删除的策略delete_self on person;
在哪里

create函数current\u person\u id()返回int作为$$
选择nullif(当前设置('jwt.claims.person\u id',true),''::int;
$$语言sql稳定;

如果您需要更多指导,请随时进入。

您能在问题中包括您的
updatePersonById
解析器吗?@nimish我已在我的编辑1中附上了它。