在PostgreSQL中是否可能合并查询结果?

3

我需要联合来自不同查询的表,并从存储过程返回整个结果集。这就是我的意思:

CREATE OR REPLACE FUNCTION invalid_pa() RETURNS TABLE (p_id int) AS $$
DECLARE
    pl int[] := ARRAY(SELECT id FROM p.pl);
BEGIN
    FOR i IN 1 .. array_upper(platforms, 1)
    LOOP
          --The query is SELECT id FROM dblink(connection_str(i), 'Some query')
          --I need to union all the query above
          --and return the unioned table
    END LOOP;
END $$
LANGUAGE plpgsql;

我该如何以这样的方式合并不同的结果集?

这里的connection_str(i)是一个返回实际连接字符串的存储过程。


是的,请使用动态SQL(执行 $s$ select * from $s$||表名||$s$ union .....$s$)。 - Vao Tsun
1个回答

4
您发布的代码有些问题,但是忽略这些问题,解决方案会有些类似于以下内容:
CREATE OR REPLACE FUNCTION invalid_pa() RETURNS TABLE (p_id int) AS $$
DECLARE
  pl int[] := ARRAY(SELECT id FROM p.pl); -- ???
BEGIN
  FOR i IN 1 .. array_upper(platforms, 1) -- platforms???
  LOOP
    RETURN QUERY SELECT id FROM dblink(connection_str(i), 'Some query');
  END LOOP;
  RETURN;
END $$ LANGUAGE plpgsql;

RETURN QUERY 会将零个或多个行添加到结果集中,而最终的 RETURN 则将整个结果集返回给调用者。实际上,所有 dblink 调用的结果都会被合并(UNION)在一起。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接