PostgreSQL - 计算列返回“是我的”布尔值

问题描述

总的来说,我是 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$;