我创建了一个rpc函数来获取用户每个帖子的赞数,所以我创建了一个以userId为参数的函数,userId是会话中用户的uuid,但是当我调用前面的函数时,它返回我。
如果使用此名称和参数在数据库中创建了新函数,请尝试重新加载架构缓存。
该功能:
create function get_number_of_posts_by_user(userId uuid)
returns integer
as $$
SELECT
count(pl.id)
FROM
auth.users au
join posts p on p.user_id = au.id
join post_likes pl on pl.post_id = p.id
where au.id = userId
$$ language sql;
1条答案
按热度按时间shyt4zoc1#
获取用户每个帖子的喜欢数量
你需要分组邮递才能到那里。
电话:
要点:
users
表,直接按posts.user_id
过滤,更便宜。count(*)
〉〉count(pl.id)
在这个例子中。也便宜一点。count(*) has a separate implementation在postgres中。count()
返回bigint
,而不是integer
。以某种方式匹配RETURNS
声明的内容。_
(列名决不能使用相同的前缀)是一个常见的约定。和表限定列名。在这种情况下,避免
OUT
参数post_id
(在查询中也可见)和post_likes.post_id
之间的冲突。您最初的问题可能是XY问题,通过正确的函数定义就可以解决。
解决标题问题
如果确实需要重新加载模式缓存,请使用:
本手册:
您可以调用
pg_stat_clear_snapshot()
来丢弃当前事务的统计信息快照或缓存值(如果有)。下次使用统计信息时(在快照模式下)将生成新快照或(在缓存模式下)缓存访问的统计信息。我自己从来没有过这样的需要,通常情况下,问题出在其他地方。