From: | Dmitriy Igrishin <dmitigr(at)gmail(dot)com> |
---|---|
To: | "Dmitry E(dot) Oboukhov" <unera(at)debian(dot)org> |
Cc: | pgsql-ru-general(at)postgresql(dot)org |
Subject: | Re: [pgsql-ru-general] аггреггирование в массив с именами столбиков |
Date: | 2011-03-05 19:40:27 |
Message-ID: | AANLkTimt92-XD2EoS7LeK4XkiSxQQvGG-GqBjdyEvjCD@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-ru-general |
Приветствую,
5 марта 2011 г. 21:47 пользователь Dmitry E. Oboukhov <unera(at)debian(dot)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(at)debian(dot)org jabber://UNera(at)uvw(dot)ru
> `. `~’ GPGKey: 1024D / F8E26537 2006-11-21
> `- 1B23 D4F8 8EC0 D902 0555 E438 AB8C 00CF F8E2 6537
>
--
// Dmitriy.
From | Date | Subject | |
---|---|---|---|
Next Message | Dmitry E. Oboukhov | 2011-03-05 20:07:46 | Re: аггреггирование в массив с именами столбиков |
Previous Message | Dmitry E. Oboukhov | 2011-03-05 18:47:51 | аггреггирование в массив с именами столбиков |