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

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.

In response to

Responses

Browse pgsql-ru-general by date

  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 аггреггирование в массив с именами столбиков