Обновите уникальные значения в массиве Postgres - PullRequest
0 голосов
/ 16 ноября 2018

У меня есть ситуация, когда я обновляю столбец таблицы Postgres типа bigint[]. Этот массив должен иметь уникальные числа внутри него всякий раз, когда запускается запрос update.

Запрос приведен ниже

UPDATE book_shelf 
SET book_id = book_id || array[CAST(:bookID AS BIGINT)], updated_at = now() 
WHERE user_id = :userID AND shelf_name = :shelfName

Когда запускается приведенный выше запрос, он просто добавляет число в массив, чего я не хочу, чтобы он выполнялся. Он должен содержать только уникальные значения. Пожалуйста, помогите мне.

1 Ответ

0 голосов
/ 16 ноября 2018

Вы можете проверить, существует ли он в массиве, прежде чем добавлять его:

UPDATE book_shelf 
SET book_id = CASE WHEN CAST(:bookID AS BIGINT) = ANY(book_id) THEN book_id ELSE ARRAY_APPEND(book_id, CAST(:bookID AS BIGINT)) END, updated_at = now() 
WHERE user_id = :userID AND shelf_name = :shelfName

Конечно, если updated_at следует устанавливать только в том случае, если book_id действительно обновлено, тогда поставьте проверку в ГДЕпункт, поэтому он не обновляется без необходимости:

UPDATE book_shelf 
SET book_id = ARRAY_APPEND(book_id, CAST(:bookID AS BIGINT)), updated_at = now() 
WHERE user_id = :userID
AND shelf_name = :shelfName
AND NOT CAST(:bookID AS BIGINT) = ANY(book_id)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...