如何在Hasura中通过自定义SQL函数检测userhandle是否已存在
解决Hasura中用EXISTS判断Userhandle是否存在的SQL函数问题
嘿,你的思路完全没问题——确实可以用EXISTS来判断userhandle是否存在并返回布尔值,只是你的函数写法有两个小问题,我帮你修正一下:
原函数的问题
- 多余的参数:
users_row users这个参数完全没用,因为你不需要传入某一行用户数据,只需要传入要搜索的search文本即可。 - SQL语法问题:SQL函数需要用
SELECT来返回结果,你直接写EXISTS(...)会导致语法错误,得把它包裹在SELECT里。
修正后的函数
CREATE FUNCTION userhandle_exist(search text) RETURNS BOOLEAN AS $$ SELECT EXISTS(SELECT 1 FROM users WHERE users.userhandle = search); $$ LANGUAGE sql STABLE;
关键说明
- EXISTS的作用:
EXISTS(SELECT 1 FROM users WHERE ...)会在找到匹配的userhandle时返回true,否则返回false,完美符合你的需求。用SELECT 1比SELECT *更高效,因为数据库不需要返回实际行数据,只要确认存在性就行。 - Hasura兼容性:返回
BOOLEAN完全符合Hasura对BASE类型的要求,STABLE关键字也没问题——因为这个函数不会修改数据,且在同一事务内多次调用结果一致。 - 使用场景:你可以在Hasura的权限规则、自定义业务逻辑或者注册流程的校验里调用这个函数,比如在插入用户前检查
userhandle_exist(new.userhandle)是否为false。
内容的提问来源于stack exchange,提问作者Svarto
相关产品推荐
相关产品推荐

