Hasura中使用GraphQL更新users表报错:'update_users'无'_set'参数
Hasura更新用户表时'_set'参数不存在的错误解决
问题场景
我尝试在Hasura中更新users表,根据主键id匹配行,更新nullable且unique的account_id字段,编写的GraphQL mutation及请求代码如下:
const query = `mutation updateAccountId($id: String!, $account_id: String) { update_users(where: {id: {_eq: $id}}, _set: {account_id: $account_id}){ affected_rows } }`; fetch("https://xyz.hasura.app/v1/graphql", { method: "post", headers: { "content-type": "application/json", Authorization: `Bearer ${token}`, }, body: JSON.stringify({ query, variables: { id: "P9gc6WanL9YAy7JdD6pEbcfULYt2", account_id: "3afc4fds2ds4", }, }), }).then((response) => { console.log(response); });
多次执行后返回错误:
{ "errors": [ { "extensions": { "code": "validation-failed", "path": "$.selectionSet.update_users" }, "message": "'update_users' has no argument named '_set'" } ] }
解决方法
方法1:使用主键单条更新(推荐)
由于是通过主键定位单条记录,直接使用update_users_by_pk方法更高效,该方法原生支持_set参数:
const query = `mutation updateAccountId($id: String!, $account_id: String) { update_users_by_pk(pk_columns: {id: $id}, _set: {account_id: $account_id}){ affected_rows id account_id } }`;
pk_columns:指定主键匹配条件,精准定位单条记录- 返回字段可按需添加,方便验证更新结果
方法2:排查批量更新的权限与配置
如果坚持使用update_users批量更新方法,需确认以下两点:
- 登录Hasura控制台,检查users表的更新权限是否开启,且权限规则允许使用
_set操作 - 确认Hasura版本支持批量更新的
_set语法(v1.0及以上版本均支持)
也可以通过Hasura控制台的GraphQL Explorer查看update_users的参数结构,确认是否包含_set参数,快速定位是语法问题还是权限配置问题。
内容的提问来源于stack exchange,提问作者mused
相关产品推荐
相关产品推荐

