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

From Dmitry E. Oboukhov
Subject Сконкатенировать два массива - DISTINCT
Date
Msg-id 20130901103044.GD20873@vdsl.uvw.ru
Whole thread Raw
List pgsql-ru-general
есть записи в табличке

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

Attachment

pgsql-ru-general by date:

Previous
From: "ciifrancesco@tiscali.it"
Date:
Subject: R: [pgsql-zh-general] (solved - 谢谢) Chinese in Postgres
Next
From: Олексій Васильєв
Date:
Subject: Re: [pgsql-ru-general] Сконкатенировать два массива - DISTINCT