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;