psql: обновить столбец, состоящий из массива строк, объединить другой массив строк и удалить дубликаты - PullRequest
0 голосов
/ 11 декабря 2018

Я попробовал следующее:

SELECT tags FROM articles WHERE id = 1;
=> {news,new} 
UPDATE articles SET tags = uniq(array_cat(tags, '{new,trendy,latest}')) WHERE id = 1;
=> [1]
SELECT tags FROM articles WHERE id = 1;
=> {news,new,trendy,latest}

, но по команде UPDATE я получаю:

ERROR: function uniq(text[]) does not exist

Теперь есть способ добавить несуществующие тегитолько в одной команде UPDATE?

Спасибо за вашу помощь!

РЕДАКТИРОВАТЬ:

Я думаю, что решением может быть итерация обновления для каждого отдельного тега с добавлением ограничения where, такогоas: WHERE NOT ('tag-name' = ANY(tags)) но мне интересно, сможем ли мы сделать это за один снимок.

EDIT2:

Обнаружил это https://grokbase.com/t/postgresql/pgsql-general/083k9e85rb/array-cat-without-duplicity, но кажется даже более сложным, чем итерация по каждому тегу.

1 Ответ

0 голосов
/ 11 декабря 2018

Найдено два способа:

UPDATE articles SET tags = ARRAY(SELECT unnest(tags) UNION SELECT unnest(ARRAY['new', 'trendy', 'latest'])) WHERE id = 1;
 

или:

UPDATE articles SET tags = ARRAY(SELECT DISTINCT unnest(array_cat(tags, '{new,trendy,latest}'))) WHERE id = 673738;
 

Не помечен как принятый ответ.Не стесняйтесь опубликовать свое решение.Спасибо!: -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...