From: | Dmitriy Olshevskiy <olshevskiy87(at)bk(dot)ru> |
---|---|
To: | Владимир Комаров <vlads(at)sibnet(dot)ru> |
Cc: | Alexey Kolpakov <al(dot)kolpak(at)gmail(dot)com>, Oleg Bartunov <obartunov(at)gmail(dot)com>, pgsql-ru-general(at)postgresql(dot)org |
Subject: | Re: Вопрос по построению запросу |
Date: | 2014-10-20 19:31:21 |
Message-ID: | 54456309.7090301@bk.ru |
Views: | Whole Thread | Raw Message | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-ru-general |
Здравствуйте, Олег, Владимир и Алексей.
У меня несколько замечаний, которые я позволю себе высказать.
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(dot)kolpak(at)gmail(dot)com
> <mailto:al(dot)kolpak(at)gmail(dot)com>>:
>
> select concat_ws(',', "spr.tovar".*) from spr.tovar
>
>
> 20 октября 2014 г., 20:31 пользователь Владимир Комаров
> <vlads(at)sibnet(dot)ru <mailto:vlads(at)sibnet(dot)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
From | Date | Subject | |
---|---|---|---|
Next Message | Oleg Bartunov | 2014-10-20 19:36:13 | Re: [pgsql-ru-general] Вопрос по построению запросу |
Previous Message | Oleg Bartunov | 2014-10-20 17:29:34 | Re: [pgsql-ru-general] Re: [pgsql-ru-general] Вопрос по построению запросу |