Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PostgreSQL:将行输出为逗号分隔字符串列表_Sql_Postgresql - Fatal编程技术网

PostgreSQL:将行输出为逗号分隔字符串列表

PostgreSQL:将行输出为逗号分隔字符串列表,sql,postgresql,Sql,Postgresql,在PostgreSQL 11上,我想将表中的行作为逗号分隔的字符串列表输出: id,info,name,message 我尝试了以下查询: SELECT array_to_string(array_agg(t), ',', '') FROM (

在PostgreSQL 11上,我想将表中的行作为逗号分隔的字符串列表输出:

id,info,name,message
我尝试了以下查询:

SELECT array_to_string(array_agg(t), ',', '')                                                                                                                          
FROM (                                                                      
    SELECT id, info, name, message
    FROM myschema.mytable
) t;
但这会产生:

(1,foo,bar,baz),(2,qux,zap,xen)
相反,期望的结果应该如下所示:

1,foo,bar,baz
2,qux,zap,xen

正确的查询是什么?

我可以用以下函数解决它:

CREATE OR REPLACE FUNCTION myschema.get_foo()
RETURNS SETOF text AS $$
BEGIN
    RETURN QUERY
        SELECT COALESCE(array_to_string(array[id::text, info::text, name::text, message::text], ','), ''::text)
        FROM myschema.mytable;
END;
$$ LANGUAGE plpgsql;
然后运行:

SELECT * FROM myschema.get_foo();
你似乎想要:

SELECT id, CONCAT_WS(',', info, name, message)
FROM myschema.mytable;
无需汇总。所需的值都在一行中

当然,您可以在字符串中包含id,而不是作为单独的列:

SELECT CONCAT_WS(',', id, info, name, message)
FROM myschema.mytable;