У меня есть таблица с ограничением 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
ловит другие случайные нарушения.
( демонстрационная онлайн-площадка с возможным, но слишком повторяющимся решением)