PostgreSQL: выводить строки как список разделенных запятыми строк - PullRequest
0 голосов
/ 24 марта 2020

В 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

Каким будет правильный запрос?

Ответы [ 2 ]

1 голос
/ 24 марта 2020

Вы, кажется, хотите:

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

Агрегирование не требуется. Все нужные значения находятся в одной строке.

Конечно, вы можете включить id в строку вместо отдельного столбца:

SELECT CONCAT_WS(',', id, info, name, message)
FROM myschema.mytable;
0 голосов
/ 24 марта 2020

Я мог бы решить это с помощью следующей функции:

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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...