Re: [pgsql-ru-general] Вопрос по построению запросу - Mailing list pgsql-ru-general

From Oleg Bartunov
Subject Re: [pgsql-ru-general] Вопрос по построению запросу
Date
Msg-id CAF4Au4yycTkDh5_BwRi-uk=n44z=mWMrZEFd8E0WeV9_XE+SmA@mail.gmail.com
Whole thread Raw
In response to Re: Вопрос по построению запросу  (Dmitriy Olshevskiy <olshevskiy87@bk.ru>)
Responses Re: [pgsql-ru-general] Re: [pgsql-ru-general] Вопрос по построению запросу  (Aln Kapa <alnkapa@gmail.com>)
List pgsql-ru-general

Да поменяйте аргументы в coalesc,  я по памяти писал,  ошибся.  Главное,  идея правильная

On Oct 20, 2014 11:31 PM, "Dmitriy Olshevskiy" <olshevskiy87@bk.ru> wrote:
Здравствуйте, Олег, Владимир и Алексей.
У меня несколько замечаний, которые я позволю себе высказать.
1.
>> select concat_ws(',', t.*) from spr.tovar t;
select t::text from spr.tovar t;
оба запроса по сути делают одно и то же, но второй заметно короче.
2.
>> select concat_ws(',', coalesce('', spr.tovar.*)) from spr.tovar
У coalesce здесь на первом месте константа '', а не проверяемое значение.
В таком случае результатом всегда будет пустая строка, потому что она не null.
3.
с таким coalesce postgres будет ругаться на круглые скобки (DETAIL: 
Missing left parenthesis), указывая на первый апостроф пустой строки, т.е
он будет ожидать тип записи таблицы spr.tovar.
4.
честно говоря, у меня нет своего решения, но вот тут нашел одно
довольное интересное http://stackoverflow.com/questions/11469059/postgresql-return-entire-row-as-array
т.е. в вашем случае, Владимир, можно написать так:
select array_to_string(
    translate(
        string_to_array(t::text,',')::text, '()', ''
    )::text[], ','
)
from spr.tovar t

Проверял на postgresql 9.3.4.
Если в чем-то неправ, прошу объяснить почему. Спасибо)

On 20.10.2014 21:29, Oleg Bartunov wrote:
Не забываем про  coalesce(), если не хотите удивляться !
select concat_ws(',', coalesce('', spr.tovar.*)) from spr.tovar

2014-10-20 21:03 GMT+04:00 Alexey Kolpakov <al.kolpak@gmail.com>:

select concat_ws(',', "spr.tovar".*) from spr.tovar 


20 октября 2014 г., 20:31 пользователь Владимир Комаров <vlads@sibnet.ru> написал:

Здраствуйте.

Есть запрос:

SELECT * FROM spr.tovar

Надо вместо «*» поставить некую функцию, которая возвращала только одну строку типа text, содержащую информацию из всех столбцов таблицы. Т.е. соединяла их в одну строку.

Количество столбцов, как и их содержание неизвестно.  Так что предложение на подобии kod||','||name||','||… не подходят.

 

Пример:

SELECT * FROM spr.tovar

X             name    …

-----------------------

1             tov1       …

2             tov2       …

 

А надо

SELECT ??? FROM spr.tovar

Text

------------

1,tov1,

2,tov2,

 

 

Заранее большое спасибо.




--
wbr, Alexey Kolpakov


-- 
Dmitriy Olshevskiy

pgsql-ru-general by date:

Previous
From: Dmitriy Olshevskiy
Date:
Subject: Re: Вопрос по построению запросу
Next
From: Aln Kapa
Date:
Subject: Re: [pgsql-ru-general] Re: [pgsql-ru-general] Вопрос по построению запросу