Re: [pgsql-ru-general] Сконкатенировать два массива - DISTINCT

From: Олексій Васильєв <leopard_ne(at)inbox(dot)ru>
To: Dmitry E(dot) Oboukhov <unera(at)debian(dot)org>
Cc: pgsql-ru-general(at)postgresql(dot)org
Subject: Re: [pgsql-ru-general] Сконкатенировать два массива - DISTINCT
Date: 2013-09-01 11:36:35
Message-ID: 1378035395.622408124@f326.i.mail.ru
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-ru-general

Как насчет модуля  http://www.postgresql.org/docs/9.1/static/intarray.html  с функцией  uniq ?

Воскресенье, 1 сентября 2013, 14:30 +04:00 от "Dmitry E. Oboukhov" <unera(at)debian(dot)org>:
>есть записи в табличке
>
>name: TEXT
>tags: TEXT[]
>
>
>приходит апдейт с новыми тегами
>
>UPDATE
>    table
>SET
>    tags = tags || ARRAY['newtag1', 'newtag2', 'newtag3']
>WHERE
>    name = 'вася'
>
>
>или, что тоже самое:
>
>
>UPDATE
>    table
>SET
>    tags = array_cat(tags, ARRAY['newtag1', 'newtag2', 'newtag3'])
>WHERE
>    name = 'вася'
>
>
>Вопрос, как *просто* удерживать список тегов в уникальном состоянии?
>
>то есть если из новых тегов, скажем newtag2 уже есть в tags, то
>newtag2 бы не добавился в список?
>
>Понятно что можно сваять секцию WITH
>
>WITH newtags (
>    SELECT
>        DISTINCT
>            unnest(tags || ARRAY['newtag1', 'newtag2', 'newtag3']) AS "tag"
>    FROM
>        table
>    WHERE
>        name = 'вася'
>)
>
>и потом их назад сагрегировать, но это что-то довольно сложное
>получается.
>
>
>--
>
>. ''`. 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
>

--
Олексій Васильєв

In response to

Responses

Browse pgsql-ru-general by date

  From Date Subject
Next Message Dmitry E. Oboukhov 2013-09-01 12:17:34 Re: Re: [pgsql-ru-general] Сконкатенировать два массива - DISTINCT
Previous Message Dmitry E. Oboukhov 2013-09-01 10:30:44 Сконкатенировать два массива - DISTINCT