Обновление значений в массиве PostgreSQL - PullRequest
4 голосов
/ 11 ноября 2011

У меня есть несколько столбцов в базе данных PostgreSQL, которые являются массивом.Я хочу добавить новое значение (в UPDATE) в него, если значение не существует, в противном случае, не добавляйте ничего.Я не хочу перезаписывать текущее значение массива, а только добавить к нему элемент.

Возможно ли сделать это в запросе или мне нужно сделать это внутри функции?Я использую PostgreSQL.

1 Ответ

9 голосов
/ 11 ноября 2011

Это должно быть так же просто, как в этом примере для целочисленного массива (integer[]):

UPDATE tbl SET col = col || 5
WHERE  (5 = ANY(col)) IS NOT TRUE;

А WHERE Предложение типа:

WHERE  5 <> ALL(col)

также будет ловитьслучай пустого массива '{}'::int[], но завершится неудачей, если в качестве элемента массива появится значение NULL.

Если ваши массивы никогда не содержат NULL в качестве элемента, рассмотрим фактические операторы массива ,возможно поддерживается индексом GIN.

UPDATE tbl SET col = col || 5
WHERE  NOT col @> '{5}';

См .:

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