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

From Олексій Васильєв
Subject Re: [pgsql-ru-general] Сконкатенировать два массива - DISTINCT
Date
Msg-id 1378035395.622408124@f326.i.mail.ru
Whole thread Raw
Responses Re: Re: [pgsql-ru-general] Сконкатенировать два массива - DISTINCT  ("Dmitry E. Oboukhov" <unera@debian.org>)
List pgsql-ru-general
Как насчет модуля http://www.postgresql.org/docs/9.1/static/intarray.html с функцией uniq ?


Воскресенье, 1 сентября 2013, 14:30 +04:00 от "Dmitry E. Oboukhov" <unera@debian.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@debian.org jabber://UNera@uvw.ru
`. `~’ GPGKey: 1024D / F8E26537 2006-11-21
  `- 1B23 D4F8 8EC0 D902 0555 E438 AB8C 00CF F8E2 6537



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

pgsql-ru-general by date:

Previous
From: "Dmitry E. Oboukhov"
Date:
Subject: Сконкатенировать два массива - DISTINCT
Next
From: "Dmitry E. Oboukhov"
Date:
Subject: Re: Re: [pgsql-ru-general] Сконкатенировать два массива - DISTINCT