PL/pgSQL 行到 json 数组

Mat*_* M. 2 postgresql stored-procedures plpgsql

我正在尝试检索包含此函数返回的行的 json 数组:

CREATE OR REPLACE FUNCTION get_users_list() 
RETURNS TABLE (
id INTEGER,
name VARCHAR,
surname VARCHAR,
fkrole INTEGER,
username VARCHAR
) as $$
BEGIN

RETURN QUERY SELECT users.id, users.name,
                    users.surname, users.fkrole, 
                    users.username 
FROM users;
END;
$$ LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)

谁能给我提示吗?如何将多行转换为单个 JSON 数组?

谢谢!

rav*_*oli 6

尝试一下:

SELECT JSON_AGG(src) AS my_json_array
FROM (
  SELECT 
    users.id, 
    users.name, 
    users.surname, 
    users.fkrole, 
    users.username 
  FROM users
) src
;
Run Code Online (Sandbox Code Playgroud)

这将为您提供“src”查询中以单个 json 数组形式返回的所有行。

http://www.sqlfiddle.com/#!17/6241a/2

以下是有关 Postgres JSON 函数的更多信息:https://www.postgresql.org/docs/10/static/functions-json.html

  • 谢谢你的提示!为了将来的参考,工作函数是 `CREATE OR REPLACE FUNCTION get_users_list() RETURNS JSON as $$ DECLARE users JSON; BEGIN SELECT json_agg(src) INTO users FROM ( SELECT users.id, users.name, users.surname, Roles.role, users.username FROM users, Roles WHERE users.fkrole = Roles.id ) src ; 返回用户;结尾; $$ 语言 plpgsql;` (3认同)