Function 如何使用postgreSQL形成键/值数组?

Function 如何使用postgreSQL形成键/值数组?,function,postgresql,Function,Postgresql,我目前有两个表: tblFoo foo_id foo_text 1 foo 及 我试图使用一个函数(la: CREATE OR REPLACE FUNCTION fetch_foo(p_foo_id int) RETURNS record as $$ DECLARE rec record; BEGIN SELECT F.foo_id, foo_text, array_agg(bar_text) as bar_t

我目前有两个表:

tblFoo
foo_id   foo_text
1        foo

我试图使用一个函数(la:

CREATE OR REPLACE FUNCTION fetch_foo(p_foo_id int) RETURNS record as $$
DECLARE 
    rec record;
BEGIN
    SELECT
        F.foo_id,
        foo_text,
        array_agg(bar_text) as bar_text
    FROM tblFoo F
    LEFT JOIN tblBar B
    ON F.foo_id = B.foo_id
    WHERE F.foo_id = p_foo_id
    GROUP BY F.foo_id
    INTO rec;
RETURN rec;
END
$$ LANGUAGE plpgsql;
目前,这将返回一个名为'fetch_foo'的连接字段,该字段位于
(1,“foo”,“{hello,world}”)
。我已经在上阅读了回复,并且理解我不需要在这里创建类型来返回带有单独字段的记录。我忽略了什么


谢谢。

您不需要定义记录。它比这简单得多,只需将其定义为“返回表”,并使用SQL而不是PL/pgSQL

CREATE OR REPLACE FUNCTION fetch_foo(p_foo_id int) 
     RETURNS table(foo_id int, foo_text text, bar_text text[]) 
AS 
$$
   SELECT
        F.foo_id,
        foo_text,
        array_agg(bar_text) as bar_text
    FROM tblFoo F
    LEFT JOIN tblBar B
    ON F.foo_id = B.foo_id
    WHERE F.foo_id = $1
    GROUP BY F.foo_id
$$ 
LANGUAGE sql;

我认为循环可能是在将字段拆分出来之后-请重新阅读您的链接答案循环。特别是:从test_ret('foo','barbaz')中选择a,b,c作为(a BOOL,b TEXT,c TEXT);
CREATE OR REPLACE FUNCTION fetch_foo(p_foo_id int) 
     RETURNS table(foo_id int, foo_text text, bar_text text[]) 
AS 
$$
   SELECT
        F.foo_id,
        foo_text,
        array_agg(bar_text) as bar_text
    FROM tblFoo F
    LEFT JOIN tblBar B
    ON F.foo_id = B.foo_id
    WHERE F.foo_id = $1
    GROUP BY F.foo_id
$$ 
LANGUAGE sql;