我对 pg 相当陌生,并试图找出将一组帖子及其相关评论一起加载的最佳方法。
例如:我正在尝试获取与所有这些帖子相关的 10 个帖子和评论,例如 facebooks 墙,您可以在其中看到加载在同一页面上的帖子和评论的提要。我的架构看起来像这样:
Posts
--------
id - author - description - date - commentCount
Comments
-------
id - post_id - author - description - date
我尝试在同一个 postgres 函数上加载帖子和评论,执行以下操作:
select *
from posts
LEFT join comments on posts.id = comments.post_id
不幸的是,它在评论存在的地方重复了 N 次帖子,其中 N 是帖子的评论数。但是,第一个解决方案是我总是可以在获取数据后在 Node 中将其过滤掉
此外,当我尝试按 post.id 使用 group(以便更容易在节点中遍历)时,我收到以下错误:
column "comments.id" must appear in the GROUP BY clause or be used in an aggregate function
我可以尝试的第二件事是发送一个我想要加载的 post_ids 数组并加载 pg_function 并将它们发送回来,但我不能完全正确地查询:
CREATE OR REPLACE FUNCTION "getPosts"(postIds int[])
RETURNS text AS
$BODY$
BEGIN
RETURN (
SELECT *
FROM Comments
WHERE Comments.id = postIds[0]
);
END;$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
称之为:
SELECT n FROM "public"."getPosts"(array[38]) As n;
但是,即使尝试从一个索引中获取值,我也会收到以下错误:
ERROR: subquery must return only one column
LINE 1: SELECT (
^
QUERY: SELECT (
SELECT *
FROM Comments
WHERE Comments.id = 38
)
最后,最后的解决方案是简单地对 postgres 进行 N 次单独调用,其中 N 是带有评论的帖子数,因此如果我有 5 个带有评论的帖子,我会使用 post_id 对 postgres 进行 5 次调用,并从 Comments 表中进行选择。
我真的不知道该怎么做,任何帮助将不胜感激。
谢谢