Re: [pgsql-ru-general] Агрегация массивов

Lists: pgsql-ru-general
From: Mihail Nasedkin <m(dot)nasedkin(at)gmail(dot)com>
To: pgsql-ru-general(at)postgresql(dot)org
Subject: Агрегация массивов
Date: 2010-12-12 11:24:57
Message-ID: AANLkTi=-6uuuOPTq2hwLn-KZ=qpmbmL-cppU9r+qM4KT@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-ru-general

Как обычно, доброго всем.

Встала задача агрегировать не одиночные значения, а массивы в один
результирующий массив.
Пока смог реализовать такой, неуклюжий вариант:

select id,

string_to_array(
array_to_string(
array_concat(
array_to_string(arr, ',')
)
, ',')
, ',')::int[]

from (
values
(0, array[0]),
(1, array[1,2]),
(1, array[3,4,5])
) v (id, arr)

group by id
;

Результат:
1;"{1,2,3,4,5}"
0;"{0}"

Результат тот, который требуется, но можно ли сделать агрегацию
массивов в одной функции?

--
---
С уважением,
Михаил Наседкин


From: Dmitriy Igrishin <dmitigr(at)gmail(dot)com>
To: Mihail Nasedkin <m(dot)nasedkin(at)gmail(dot)com>
Cc: pgsql-ru-general(at)postgresql(dot)org
Subject: Re: [pgsql-ru-general] Агрегация массивов
Date: 2010-12-12 11:42:17
Message-ID: AANLkTimPaiv7GobtxWcGNV=AXTU=vWDJzm0UDbF+E2QU@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-ru-general

Привет,

CREATE TABLE att (id integer not null, dat integer[] not null);
INSERT INTO att(id, dat) SELECT 1, ARRAY[1,2];
INSERT INTO att(id, dat) SELECT 1, ARRAY[3,4,5];
INSERT INTO att(id, dat) SELECT 2, ARRAY[6];
INSERT INTO att(id, dat) SELECT 2, ARRAY[7,8,9,10];
SELECT id, array_agg(dat) FROM(SELECT id, unnest(dat) as dat from att) AS
foo GROUP BY id;

id | array_agg
----+--------------
1 | {1,2,3,4,5}
2 | {6,7,8,9,10}
(2 rows)

Надеюсь, что понял Вас правильно.

12 декабря 2010 г. 14:24 пользователь Mihail Nasedkin
<m(dot)nasedkin(at)gmail(dot)com>написал:

> Как обычно, доброго всем.
>
> Встала задача агрегировать не одиночные значения, а массивы в один
> результирующий массив.
> Пока смог реализовать такой, неуклюжий вариант:
>
> select id,
>
> string_to_array(
> array_to_string(
> array_concat(
> array_to_string(arr, ',')
> )
> , ',')
> , ',')::int[]
>
> from (
> values
> (0, array[0]),
> (1, array[1,2]),
> (1, array[3,4,5])
> ) v (id, arr)
>
> group by id
> ;
>
> Результат:
> 1;"{1,2,3,4,5}"
> 0;"{0}"
>
> Результат тот, который требуется, но можно ли сделать агрегацию
> массивов в одной функции?
>
> --
> ---
> С уважением,
> Михаил Наседкин
>
> --
> Sent via pgsql-ru-general mailing list (pgsql-ru-general(at)postgresql(dot)org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-ru-general
>

--
// Dmitriy.


From: Mihail Nasedkin <m(dot)nasedkin(at)gmail(dot)com>
To: Dmitriy Igrishin <dmitigr(at)gmail(dot)com>
Cc: pgsql-ru-general(at)postgresql(dot)org
Subject: Re: [pgsql-ru-general] Агрегация массивов
Date: 2010-12-12 12:06:31
Message-ID: AANLkTi=1GNPbdrH1PQQ2q7YH+qLU1_rVo53KwkSoUKLe@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-ru-general

Да, Дмитрий, спасибо, Вы правильно поняли, то что нужно.
Стандартная фунция и описана в документации?

--
---
С уважением,
Михаил Наседкин


From: Dmitriy Igrishin <dmitigr(at)gmail(dot)com>
To: Mihail Nasedkin <m(dot)nasedkin(at)gmail(dot)com>
Cc: pgsql-ru-general(at)postgresql(dot)org
Subject: Re: [pgsql-ru-general] Агрегация массивов
Date: 2010-12-12 12:13:44
Message-ID: AANLkTi=ZXkFq2J+oCwpLaB+n1jHUssj9K50iysu=L_CU@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-ru-general

array_agg и unnest появились в Постресе относительно
недавно в релизе 8.4. Они же описаны и в стандарте SQL.

12 декабря 2010 г. 15:06 пользователь Mihail Nasedkin
<m(dot)nasedkin(at)gmail(dot)com>написал:

> Да, Дмитрий, спасибо, Вы правильно поняли, то что нужно.
> Стандартная фунция и описана в документации?
>
>
> --
> ---
> С уважением,
> Михаил Наседкин
>

--
// Dmitriy.


From: Mihail Nasedkin <m(dot)nasedkin(at)gmail(dot)com>
To: Dmitriy Igrishin <dmitigr(at)gmail(dot)com>
Cc: pgsql-ru-general(at)postgresql(dot)org
Subject: Re: [pgsql-ru-general] Агрегация массивов
Date: 2010-12-12 12:14:08
Message-ID: AANLkTikRUYBduxjA_ZO7uFZPjvVei=8j=fAS3zQHGTPL@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-ru-general

А все же, наверное есть еще решение, чтоб агрегат кушал сразу массивы?

--
---
С уважением,
Михаил Наседкин


From: Dmitriy Igrishin <dmitigr(at)gmail(dot)com>
To: Mihail Nasedkin <m(dot)nasedkin(at)gmail(dot)com>
Cc: pgsql-ru-general(at)postgresql(dot)org
Subject: Re: [pgsql-ru-general] Агрегация массивов
Date: 2010-12-12 12:24:29
Message-ID: AANLkTi=Ov0wqUJmieWeKMQDBkseTrM_DM-17x-g4yukj@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-ru-general

array_agg определяет тип возвращаемого значения (массива)
по своему аргументу, который массивом быть не может.

12 декабря 2010 г. 15:14 пользователь Mihail Nasedkin
<m(dot)nasedkin(at)gmail(dot)com>написал:

> А все же, наверное есть еще решение, чтоб агрегат кушал сразу массивы?
>
> --
> ---
> С уважением,
> Михаил Наседкин
>

--
// Dmitriy.


From: Mihail Nasedkin <m(dot)nasedkin(at)gmail(dot)com>
To: Dmitriy Igrishin <dmitigr(at)gmail(dot)com>
Cc: pgsql-ru-general(at)postgresql(dot)org
Subject: Re: [pgsql-ru-general] Агрегация массивов
Date: 2010-12-12 16:37:10
Message-ID: AANLkTim73TA_EP9LJ8cLf73TY8FSC9T9Yg8xWkAaVQbp@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-ru-general

Буду проверять затратность механизма array_agg(...) ... unnest(...) на
больших массивах.

--
---
С уважением,
Михаил Наседкин


From: Mihail Nasedkin <m(dot)nasedkin(at)gmail(dot)com>
To: pgsql-ru-general(at)postgresql(dot)org
Subject: Re: Агрегация массивов
Date: 2010-12-12 17:24:51
Message-ID: AANLkTimw9_NazLjO0dBuGgE2xE9xHJFDwi_is0wsPDJ8@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-ru-general

Вот к чему стремился, нарыл в интернете из разных примеров:

CREATE OR REPLACE FUNCTION "сцепить2массива"(anyarray, anyarray)
RETURNS anyarray AS
' BEGIN RETURN $1 || $2; END;'
LANGUAGE 'plpgsql';

CREATE AGGREGATE agregate_array2array (
sfunc = array_concat,
basetype = anyarray,
stype = anyarray,
initcond = '{}'
);

select id,
agregate_array2array(arr)

from (
values
(0, array[0]),
(1, array[1,2]),
(1, array[3,4,5])
) v (id, arr)

group by id
;

Вообще понимания агрегации у меня нету.

12.12.10, Mihail Nasedkin<m(dot)nasedkin(at)gmail(dot)com> написал(а):
> Как обычно, доброго всем.
>
> Встала задача агрегировать не одиночные значения, а массивы в один
> результирующий массив.
> Пока смог реализовать такой, неуклюжий вариант:
>
> select id,
>
> string_to_array(
> array_to_string(
> array_concat(
> array_to_string(arr, ',')
> )
> , ',')
> , ',')::int[]
>
> from (
> values
> (0, array[0]),
> (1, array[1,2]),
> (1, array[3,4,5])
> ) v (id, arr)
>
> group by id
> ;
>
> Результат:
> 1;"{1,2,3,4,5}"
> 0;"{0}"
>
> Результат тот, который требуется, но можно ли сделать агрегацию
> массивов в одной функции?
>
> --
> ---
> С уважением,
> Михаил Наседкин
>

--
---
С уважением,
Михаил Наседкин


From: Mihail Nasedkin <m(dot)nasedkin(at)gmail(dot)com>
To: pgsql-ru-general(at)postgresql(dot)org
Subject: Re: Агрегация массивов
Date: 2010-12-12 17:26:56
Message-ID: AANLkTika2Mnijz01CXnY7aNguvtxECrPBrK_P+N4qv7=@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-ru-general

А ошибка в имени функции:

CREATE AGGREGATE agregate_array2array (
sfunc = "сцепить2массива",
basetype = anyarray,
stype = anyarray,
initcond = '{}'
);

12.12.10, Mihail Nasedkin<m(dot)nasedkin(at)gmail(dot)com> написал(а):
> Вот к чему стремился, нарыл в интернете из разных примеров:
>
> CREATE OR REPLACE FUNCTION "сцепить2массива"(anyarray, anyarray)
> RETURNS anyarray AS
> ' BEGIN RETURN $1 || $2; END;'
> LANGUAGE 'plpgsql';
>
> CREATE AGGREGATE agregate_array2array (
> sfunc = array_concat,
> basetype = anyarray,
> stype = anyarray,
> initcond = '{}'
> );
>
> select id,
> agregate_array2array(arr)
>
> from (
> values
> (0, array[0]),
> (1, array[1,2]),
> (1, array[3,4,5])
> ) v (id, arr)
>
> group by id
> ;
>
> Вообще понимания агрегации у меня нету.
>
> 12.12.10, Mihail Nasedkin<m(dot)nasedkin(at)gmail(dot)com> написал(а):
>> Как обычно, доброго всем.
>>
>> Встала задача агрегировать не одиночные значения, а массивы в один
>> результирующий массив.
>> Пока смог реализовать такой, неуклюжий вариант:
>>
>> select id,
>>
>> string_to_array(
>> array_to_string(
>> array_concat(
>> array_to_string(arr, ',')
>> )
>> , ',')
>> , ',')::int[]
>>
>> from (
>> values
>> (0, array[0]),
>> (1, array[1,2]),
>> (1, array[3,4,5])
>> ) v (id, arr)
>>
>> group by id
>> ;
>>
>> Результат:
>> 1;"{1,2,3,4,5}"
>> 0;"{0}"
>>
>> Результат тот, который требуется, но можно ли сделать агрегацию
>> массивов в одной функции?
>>
>> --
>> ---
>> С уважением,
>> Михаил Наседкин
>>
>
>
>
> --
> ---
> С уважением,
> Михаил Наседкин
>

--
---
С уважением,
Михаил Наседкин


From: Mihail Nasedkin <m(dot)nasedkin(at)gmail(dot)com>
To: pgsql-ru-general(at)postgresql(dot)org
Subject: Re: Агрегация массивов
Date: 2010-12-12 18:00:36
Message-ID: AANLkTik=wLqUiG9S0KwKco2R7WHePAuSV8RG1GvQTc=K@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-ru-general

В последний мой вариант отличается от первого включением в
результирующий массив всех (и null-значений элементов).

Связка string_to_array(array_to_string(...), ...) полезна в случае,
если нужно отбросить null-значения. Для второго варианта эту связку
также можно использовать в функции "сцепить2массива".

Быстродействие этих двух вариантов у меня не отличалось.

12.12.10, Mihail Nasedkin<m(dot)nasedkin(at)gmail(dot)com> написал(а):
> А ошибка в имени функции:
>
> CREATE AGGREGATE agregate_array2array (
> sfunc = "сцепить2массива",
> basetype = anyarray,
> stype = anyarray,
> initcond = '{}'
> );
>
> 12.12.10, Mihail Nasedkin<m(dot)nasedkin(at)gmail(dot)com> написал(а):
>> Вот к чему стремился, нарыл в интернете из разных примеров:
>>
>> CREATE OR REPLACE FUNCTION "сцепить2массива"(anyarray, anyarray)
>> RETURNS anyarray AS
>> ' BEGIN RETURN $1 || $2; END;'
>> LANGUAGE 'plpgsql';
>>
>> CREATE AGGREGATE agregate_array2array (
>> sfunc = array_concat,
>> basetype = anyarray,
>> stype = anyarray,
>> initcond = '{}'
>> );
>>
>> select id,
>> agregate_array2array(arr)
>>
>> from (
>> values
>> (0, array[0]),
>> (1, array[1,2]),
>> (1, array[3,4,5])
>> ) v (id, arr)
>>
>> group by id
>> ;
>>
>> Вообще понимания агрегации у меня нету.
>>
>> 12.12.10, Mihail Nasedkin<m(dot)nasedkin(at)gmail(dot)com> написал(а):
>>> Как обычно, доброго всем.
>>>
>>> Встала задача агрегировать не одиночные значения, а массивы в один
>>> результирующий массив.
>>> Пока смог реализовать такой, неуклюжий вариант:
>>>
>>> select id,
>>>
>>> string_to_array(
>>> array_to_string(
>>> array_concat(
>>> array_to_string(arr, ',')
>>> )
>>> , ',')
>>> , ',')::int[]
>>>
>>> from (
>>> values
>>> (0, array[0]),
>>> (1, array[1,2]),
>>> (1, array[3,4,5])
>>> ) v (id, arr)
>>>
>>> group by id
>>> ;
>>>
>>> Результат:
>>> 1;"{1,2,3,4,5}"
>>> 0;"{0}"
>>>
>>> Результат тот, который требуется, но можно ли сделать агрегацию
>>> массивов в одной функции?
>>>
>>> --
>>> ---
>>> С уважением,
>>> Михаил Наседкин
>>>
>>
>>
>>
>> --
>> ---
>> С уважением,
>> Михаил Наседкин
>>
>
>
> --
> ---
> С уважением,
> Михаил Наседкин
>

--
---
С уважением,
Михаил Наседкин


From: Dmitriy Igrishin <dmitigr(at)gmail(dot)com>
To: Mihail Nasedkin <m(dot)nasedkin(at)gmail(dot)com>
Cc: pgsql-ru-general(at)postgresql(dot)org
Subject: Re: [pgsql-ru-general] Re: Агрегация массивов
Date: 2010-12-12 19:44:16
Message-ID: AANLkTikopBueCrBODHrGAy3D=F7FdpFBQh09g_q5n-1C@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-ru-general

Кстати, в Постгресе есть функция array_cat, которая делает
то же, что и Ваша "специть2массива".

Я полагаю, что array_agg реализован эффективнее, чем собственно
созданный аггрегат, вызывающий ту или иную функцию конкатенации.

Впрочем, это надо проверять. Решать Вам.

12 декабря 2010 г. 21:00 пользователь Mihail Nasedkin
<m(dot)nasedkin(at)gmail(dot)com>написал:

> В последний мой вариант отличается от первого включением в
> результирующий массив всех (и null-значений элементов).
>
> Связка string_to_array(array_to_string(...), ...) полезна в случае,
> если нужно отбросить null-значения. Для второго варианта эту связку
> также можно использовать в функции "сцепить2массива".
>
> Быстродействие этих двух вариантов у меня не отличалось.
>
> 12.12.10, Mihail Nasedkin<m(dot)nasedkin(at)gmail(dot)com> написал(а):
> > А ошибка в имени функции:
> >
> > CREATE AGGREGATE agregate_array2array (
> > sfunc = "сцепить2массива",
> > basetype = anyarray,
> > stype = anyarray,
> > initcond = '{}'
> > );
> >
> > 12.12.10, Mihail Nasedkin<m(dot)nasedkin(at)gmail(dot)com> написал(а):
> >> Вот к чему стремился, нарыл в интернете из разных примеров:
> >>
> >> CREATE OR REPLACE FUNCTION "сцепить2массива"(anyarray, anyarray)
> >> RETURNS anyarray AS
> >> ' BEGIN RETURN $1 || $2; END;'
> >> LANGUAGE 'plpgsql';
> >>
> >> CREATE AGGREGATE agregate_array2array (
> >> sfunc = array_concat,
> >> basetype = anyarray,
> >> stype = anyarray,
> >> initcond = '{}'
> >> );
> >>
> >> select id,
> >> agregate_array2array(arr)
> >>
> >> from (
> >> values
> >> (0, array[0]),
> >> (1, array[1,2]),
> >> (1, array[3,4,5])
> >> ) v (id, arr)
> >>
> >> group by id
> >> ;
> >>
> >> Вообще понимания агрегации у меня нету.
> >>
> >> 12.12.10, Mihail Nasedkin<m(dot)nasedkin(at)gmail(dot)com> написал(а):
> >>> Как обычно, доброго всем.
> >>>
> >>> Встала задача агрегировать не одиночные значения, а массивы в один
> >>> результирующий массив.
> >>> Пока смог реализовать такой, неуклюжий вариант:
> >>>
> >>> select id,
> >>>
> >>> string_to_array(
> >>> array_to_string(
> >>> array_concat(
> >>> array_to_string(arr, ',')
> >>> )
> >>> , ',')
> >>> , ',')::int[]
> >>>
> >>> from (
> >>> values
> >>> (0, array[0]),
> >>> (1, array[1,2]),
> >>> (1, array[3,4,5])
> >>> ) v (id, arr)
> >>>
> >>> group by id
> >>> ;
> >>>
> >>> Результат:
> >>> 1;"{1,2,3,4,5}"
> >>> 0;"{0}"
> >>>
> >>> Результат тот, который требуется, но можно ли сделать агрегацию
> >>> массивов в одной функции?
> >>>
> >>> --
> >>> ---
> >>> С уважением,
> >>> Михаил Наседкин
> >>>
> >>
> >>
> >>
> >> --
> >> ---
> >> С уважением,
> >> Михаил Наседкин
> >>
> >
> >
> > --
> > ---
> > С уважением,
> > Михаил Наседкин
> >
>
>
> --
> ---
> С уважением,
> Михаил Наседкин
>
> --
> Sent via pgsql-ru-general mailing list (pgsql-ru-general(at)postgresql(dot)org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-ru-general
>

--
// Dmitriy.


From: Mihail Nasedkin <m(dot)nasedkin(at)gmail(dot)com>
To: Dmitriy Igrishin <dmitigr(at)gmail(dot)com>
Cc: pgsql-ru-general(at)postgresql(dot)org
Subject: Re: [pgsql-ru-general] Re: Агрегация массивов
Date: 2010-12-13 06:47:51
Message-ID: AANLkTimX0AW2UCcnCSuRiFPoBCzYPW4Rcm55XtGwRPtL@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-ru-general

Да, я тоже позже заметил, что создал дубликат функции.

Проверял эффективность трех вариантов агрегации массивов в массив
упомянутых в данном обсуждении на своих наборах данных (не более
миллиона идентификаторов во всех массивах):
1. string_to_array(
array_to_string(
array_concat(
array_to_string(
.........
2. Вариант Дмитрия array_agg(...) ... unnest(...)
3. Агрегат на основе array_cat

Так вот отличий не увидел. Чисто эстетически нравится последний вариант.

13.12.10, Dmitriy Igrishin<dmitigr(at)gmail(dot)com> написал(а):
> Кстати, в Постгресе есть функция array_cat, которая делает
> то же, что и Ваша "специть2массива".
>
> Я полагаю, что array_agg реализован эффективнее, чем собственно
> созданный аггрегат, вызывающий ту или иную функцию конкатенации.
>
> Впрочем, это надо проверять. Решать Вам.
>
> 12 декабря 2010 г. 21:00 пользователь Mihail Nasedkin
> <m(dot)nasedkin(at)gmail(dot)com>написал:
>
>> В последний мой вариант отличается от первого включением в
>> результирующий массив всех (и null-значений элементов).
>>
>> Связка string_to_array(array_to_string(...), ...) полезна в случае,
>> если нужно отбросить null-значения. Для второго варианта эту связку
>> также можно использовать в функции "сцепить2массива".
>>
>> Быстродействие этих двух вариантов у меня не отличалось.
>>
>> 12.12.10, Mihail Nasedkin<m(dot)nasedkin(at)gmail(dot)com> написал(а):
>> > А ошибка в имени функции:
>> >
>> > CREATE AGGREGATE agregate_array2array (
>> > sfunc = "сцепить2массива",
>> > basetype = anyarray,
>> > stype = anyarray,
>> > initcond = '{}'
>> > );
>> >
>> > 12.12.10, Mihail Nasedkin<m(dot)nasedkin(at)gmail(dot)com> написал(а):
>> >> Вот к чему стремился, нарыл в интернете из разных примеров:
>> >>
>> >> CREATE OR REPLACE FUNCTION "сцепить2массива"(anyarray, anyarray)
>> >> RETURNS anyarray AS
>> >> ' BEGIN RETURN $1 || $2; END;'
>> >> LANGUAGE 'plpgsql';
>> >>
>> >> CREATE AGGREGATE agregate_array2array (
>> >> sfunc = array_concat,
>> >> basetype = anyarray,
>> >> stype = anyarray,
>> >> initcond = '{}'
>> >> );
>> >>
>> >> select id,
>> >> agregate_array2array(arr)
>> >>
>> >> from (
>> >> values
>> >> (0, array[0]),
>> >> (1, array[1,2]),
>> >> (1, array[3,4,5])
>> >> ) v (id, arr)
>> >>
>> >> group by id
>> >> ;
>> >>
>> >> Вообще понимания агрегации у меня нету.
>> >>
>> >> 12.12.10, Mihail Nasedkin<m(dot)nasedkin(at)gmail(dot)com> написал(а):
>> >>> Как обычно, доброго всем.
>> >>>
>> >>> Встала задача агрегировать не одиночные значения, а массивы в один
>> >>> результирующий массив.
>> >>> Пока смог реализовать такой, неуклюжий вариант:
>> >>>
>> >>> select id,
>> >>>
>> >>> string_to_array(
>> >>> array_to_string(
>> >>> array_concat(
>> >>> array_to_string(arr, ',')
>> >>> )
>> >>> , ',')
>> >>> , ',')::int[]
>> >>>
>> >>> from (
>> >>> values
>> >>> (0, array[0]),
>> >>> (1, array[1,2]),
>> >>> (1, array[3,4,5])
>> >>> ) v (id, arr)
>> >>>
>> >>> group by id
>> >>> ;
>> >>>
>> >>> Результат:
>> >>> 1;"{1,2,3,4,5}"
>> >>> 0;"{0}"
>> >>>
>> >>> Результат тот, который требуется, но можно ли сделать агрегацию
>> >>> массивов в одной функции?
>> >>>
>> >>> --
>> >>> ---
>> >>> С уважением,
>> >>> Михаил Наседкин
>> >>>
>> >>
>> >>
>> >>
>> >> --
>> >> ---
>> >> С уважением,
>> >> Михаил Наседкин
>> >>
>> >
>> >
>> > --
>> > ---
>> > С уважением,
>> > Михаил Наседкин
>> >
>>
>>
>> --
>> ---
>> С уважением,
>> Михаил Наседкин
>>
>> --
>> Sent via pgsql-ru-general mailing list (pgsql-ru-general(at)postgresql(dot)org)
>> To make changes to your subscription:
>> http://www.postgresql.org/mailpref/pgsql-ru-general
>>
>
>
>
> --
> // Dmitriy.
>

--
---
С уважением,
Михаил Наседкин