问题描述
总的来说,我是 pg 和 dbs 的新手。我找到了一个博客数据库样板,我正在尝试添加一些计算列来返回布尔值,以确定 currentPerson(经过身份验证的用户)是否是帖子的作者。基本上,posts 表中的一个幻列,对于每个帖子,它都有一个 true 或 false,关于 currentPerson 是否创作了它。
该函数返回当前人:
SELECT *
FROM myschema.person
WHERE id = nullif(current_setting('jwt.claims.person_id',true),'')::uuid
所以,我想做类似下面的事情,但这是不正确的。这似乎是 graphiql 中的一个突变(我正在使用 postgraphile 来生成我的架构)。
有关如何在帖子表中创建 isMyPost
布尔计算列的任何提示都很棒。
CREATE OR REPLACE FUNCTION myschema.is_my_post(
)
RETURNS BOOLEAN AS
$func$
BEGIN
SELECT *
FROM myschema.post
WHERE author_id = nullif(current_setting('jwt.claims.person_id','')::uuid;
IF FOUND THEN
RETURN TRUE;
ELSE
RETURN FALSE;
END IF;
END
$func$ LANGUAGE plpgsql;
解决方法
答案是这样的,感谢@benjie @Graphile:
CREATE OR REPLACE FUNCTION myschema.post_current_person_has_reacted(
p myschema.post)
RETURNS boolean
LANGUAGE 'sql'
COST 100
STABLE PARALLEL UNSAFE
AS $BODY$
select exists(
select 1
from myschema.post_reactions pr
where pr.post_id = p.id
and pr.person_id = nullif(current_setting('jwt.claims.person_id',true),'')::uuid
)
$BODY$;