Можно ли определить триггер таким образом, чтобы вставляемая строка не вставлялась, не вызывая исключения? Мой вариант использования заключается в том, что я хочу упростить обработку исключений для клиентской библиотеки: клиентская библиотека просто выполнит оператор для вставки строки в таблицу, и я надеялся, что триггер может быть определен более или менее с использованием синтаксиса ниже :
CREATE TRIGGER control_tr AFTER INSERT ON tableFoo
FOR EACH ROW
EXECUTE PROCEDURE control_tr_fun();
CREATE OR REPLACE FUNCTION control_tr_fun() RETURNS TRIGGER AS $$
BEGIN
IF (NOT condition_is_met(NEW.a, NEW.b, NEW.c)) THEN
DO NOTHING INSTEAD OF INSERT // syntax I am hoping for instead of RAISE EXCEPTION
ELSE
RETURN NEW;
END IF;
END
$$ LANGUAGE plpgsql;
Я ценю то, что могу попросить клиентскую библиотеку вызвать функцию PL / pgSQL или создать триггер, который RAISE
s исключение, и попросить клиентскую библиотеку перехватить исключение (если оно возникло) и просто проигнорировать его, но я ищу способ реализовать это максимально прозрачно для клиента.