ОБНОВЛЕНИЕ При конфликте по ограничению УДАЛИТЬ в Postgres - PullRequest
0 голосов
/ 07 октября 2019

У меня есть таблица с ограничением CHECK, которое заставляет строку иметь значимые непустые значения. Если он станет пустым, я хочу удалить строку.

CREATE TABLE example(
   id SERIAL,
   contents INTEGER[] CONSTRAINT nonempty CHECK (array_length(contents, 1) > 0)
)

Хотелось бы, чтобы был синтаксис, подобный INSERT … ON CONFLICT для UPDATE, чтобы я мог сделать

UPDATE example
SET contents = array_remove(contents, …)
WHERE id IN (…)
ON CONFLICT ON CONSTRAINT nonempty
DO DELETE;

Есть ли способ достичь этого в одном эффективном запросе, чтобы строки, в которых contents стал бы пустым, были удалены, а другие строки были обновлены?

Полагаю, я мог бы добиться этого с помощью триггера, который проверяет ограничение и автоматически удаляет строки, но я бы предпочел сделать это явно в конкретном операторе UPDATE, а ограничение CHECK ловит другие случайные нарушения.

( демонстрационная онлайн-площадка с возможным, но слишком повторяющимся решением)

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