Re: [pgsql-ru-general] аггреггирование в массив с именами столбиков

Поиск
Список
Период
Сортировка
От Dmitriy Igrishin
Тема Re: [pgsql-ru-general] аггреггирование в массив с именами столбиков
Дата
Msg-id AANLkTimt92-XD2EoS7LeK4XkiSxQQvGG-GqBjdyEvjCD@mail.gmail.com
обсуждение исходный текст
Ответы Re: аггреггирование в массив с именами столбиков  ("Dmitry E. Oboukhov" <unera@debian.org>)
Список pgsql-ru-general
Приветствую,

5 марта 2011 г. 21:47 пользователь Dmitry E. Oboukhov <unera@debian.org> написал:

 | col1 | col2 | сol3 | ... | colN |
 | 123  | 124  | abc  | ... | xyz  |

вот данные в этой таблице - по сути хеш. вне базы данных не
используется иначе как хеш итп.

в таком "развернутом" виде данные хранятся относительно недолго,
далее они попадают в такую таблицу в поле h:

 | что-то там | ... | h[][] |

где h - массив массивов text. Эта таблица - по сути архив. из нее
делаются редкие выборки, а поля по которым надо искать вынесены в
отдельные столбики. Все данные выбираются только на этапе построения
всяких отчетов где все эти данные нужны.

ну так вот. можно ли именно SQL-запросом переложить данные из первой
таблицы во вторую?

то есть получить массив вида

ARRAY[['col1', '123'], ['col2', '124'], ... ['colN', 'xyz']]

но при этом чтобы имена столбиков не писать в SQL-запросе? проблема в
том что таблица1 иногда альтертаблится (столбик добавляется),
соотвтственно хочется убрать зависимость от этих альтертаблов на
алгоритм архивирования
Речь идёт о полуструктурированных данных. Самое лучшее решение здесь -
использование замечательного модуля hstore, например:
dmitigr=> create table test (id serial not null, fname text, lname text);
NOTICE:  CREATE TABLE will create implicit sequence "test_id_seq" for serial column "test.id"
CREATE TABLE
dmitigr=> insert into test(fname, lname) select 'dima', 'igrishin';
INSERT 0 1
dmitigr=> insert into test(fname, lname) select 'ivan', 'ivanov';
INSERT 0 1
dmitigr=> select hstore(test) from test;
                     hstore                     
-------------------------------------------------
 "id"=>"1", "fname"=>"dima", "lname"=>"igrishin"
 "id"=>"2", "fname"=>"ivan", "lname"=>"ivanov"
(2 rows)

Надеюсь, суть ясна.

Подробности здесь - http://www.postgresql.org/docs/9.0/static/hstore.html

PS. В данном случае возможно преобразовать столбец
h из типа text[][] в hstore.

--

. ''`.                               Dmitry E. Oboukhov
: :’  :   email: unera@debian.org jabber://UNera@uvw.ru
`. `~’              GPGKey: 1024D / F8E26537 2006-11-21
 `- 1B23 D4F8 8EC0 D902 0555  E438 AB8C 00CF F8E2 6537



--
// Dmitriy.


В списке pgsql-ru-general по дате отправления:

Предыдущее
От: "Dmitry E. Oboukhov"
Дата:
Сообщение: аггреггирование в массив с именами столбиков
Следующее
От: "Dmitry E. Oboukhov"
Дата:
Сообщение: Re: аггреггирование в массив с именами столбиков