如何从postgres函数返回两个SELECT语句的结果?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从postgres函数返回两个SELECT语句的结果?相关的知识,希望对你有一定的参考价值。

我有这个postgresql函数:

CREATE OR REPLACE FUNCTION public.test_q1()
 RETURNS TABLE(schemaname text)
 LANGUAGE plpgsql
AS $function$
BEGIN
   return Query (select "content" from public.post where id='863550630468626253');
  -- return Query (select count(*) from public.comments WHERE post_id='863550630468626253');
END
$function$
;

如何从此函数返回两个select语句结果?

是否有可能从函数返回两个select语句的结果集,这样当我调用public.test_q1时它将返回两个值,第一个resultset将是content的值和第一个Select中的其他列,第二个返回值将是计数?

答案

在一个查询中返回两个值?

 select p."content",
        (select count(*)
         from public.comments c
         where c.post_id = '863550630468626253'
        ) as num_comments
 from public.post p
where p.id = '863550630468626253'
            );

编辑:

我认为你不能保证函数的返回集合中的结果顺序,但是你可以使用union all来返回这两个值。据推测,content不是一个数字。因此,一种方法是转换值:

 select p."content"
 from public.post p
 where p.id = '863550630468626253'
 union all
 select count(*)::text
 from public.comments c
 where c.post_id = '863550630468626253';

我相信在实践中,这将首先返回内容,然后返回计数。但是,我不认为Postgres保证订购。

以上是关于如何从postgres函数返回两个SELECT语句的结果?的主要内容,如果未能解决你的问题,请参考以下文章

SELECT 子句中多个集合返回函数的预期行为是啥?

如何在子查询中使用 select 语句? (Postgres)

如何运行从 postgresql 中的函数生成的查询

从数据访问对象中的存储过程中返回两个 select 语句的值

如何连接 Postgres SELECT 中的列?

如何通过 postgres 中的存储函数压缩 CSV 文件