是否有可能在postgresql中结合结果?

时间:2015-08-03 09:45:05

标签: sql postgresql

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

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)这是一个返回实际连接字符串的存储过程

1 个答案:

答案 0 :(得分:2)

您发布的代码有些不妥之处,但忽略这些解决方案会有点像这样:

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