Hasura添加计算字段报错:operator does not exist: uuid = text
问题解决:operator does not exist: uuid = text
错误原因
你的u_pinned_posts表中user_id是uuid类型,但hasura_session ->> 'x-hasura-user-id'返回的是文本类型,直接用=比较两种不同类型会触发类型不匹配错误。
修复方案
需要把从session中取出的用户ID文本显式转换为uuid类型,在PostgreSQL中可以用::uuid语法实现类型转换。
修改后的完整函数代码:
CREATE OR REPLACE FUNCTION post_pinned_by_user(post_row p_posts, hasura_session json) RETURNS boolean AS $$ SELECT EXISTS ( SELECT 1 FROM u_pinned_posts A WHERE A.user_id = (hasura_session ->> 'x-hasura-user-id')::uuid AND A.post_id = post_row.id ); $$ LANGUAGE sql STABLE;
关键修改点
- 将
hasura_session ->> 'x-hasura-user-id'改为(hasura_session ->> 'x-hasura-user-id')::uuid,把文本类型的用户ID转换为uuid,和A.user_id的类型保持一致,这样就能正常执行比较操作。
内容的提问来源于stack exchange,提问作者Ali Özen
相关产品推荐
相关产品推荐

