Select 只插入 1 条记录

Select into is inserting only 1 record

我有一个查询要将所有律师和其他相关信息存储为 json:

SELECT 
    key as table, trim(both '"' from json_array_elements(value)::text) as column
FROM json_each(( 
    SELECT ed.value::json FROM (SELECT * FROM config_setting WHERE name = 'lawyers') ed ))
WHERE
    key = 'user'
GROUP BY trim(both '"' from json_array_elements(value)::text), key

并且此查询 returns 我有 2 条记录(这正是我所期待的)。

一旦我尝试将其分配给函数中的变量,它只会 returns 1 条记录:

CREATE OR REPLACE FUNCTION somefuncname() RETURNS tablearray LANGUAGE plpgsql AS $$
    DECLARE _rec tablearray;
    DECLARE total int;
    BEGIN
        SELECT t.column INTO _rec FROM  (
            SELECT 
                key as table, 
                trim(both '"' from json_array_elements(value)::text) as column
            FROM json_each(( 
                SELECT ed.value::json FROM (SELECT * FROM config_setting WHERE name = 'lawyers') ed ))
            WHERE
                key = 'user'
            GROUP BY trim(both '"' from json_array_elements(value)::text), key
        ) t;        
        RETURN _rec;
    END
$$;

SELECT * from somefuncname();

tablearray 的定义很简单,就是一个 table 一列(无 PK)。

为什么我的函数只返回 1 行而不是 2 行?我该如何解决?

您不能select将多条记录放入变量中。如果你想让函数return多条记录,那么使用:

RETURN QUERY SELECT t.column FROM (........) t;