PostgreSQL не имеет возможности вставлять точки сохранения в триггерные функции, а при возникновении исключения (например, исключение NO_DATA_FOUND) вся транзакция откатывается назад. Но вместо того, чтобы откатить всю транзакцию, я просто хотел вернуться к последней сохраненной точке.Сделки - Oracle Vs PostgreSQL
Есть ли другой альтернативный способ, в котором я могу иметь несколько точек сохранения внутри триггерных функций в Postgresql.
Вот мой код:
CREATE OR REPLACE FUNCTION func_ex() RETURNS trigger AS $func_ex$
DECLARE
var_name name;
BEGIN
INSERT INTO log_table (empid, empname) values (100, 'Name');
-- savepoint my_savepoint; "cannot have savepoints in triggers
Select empname INTO strict var_name from emp_table1 WHERE empid = 3232332;
EXCEPTION WHEN NO_DATA_FOUND THEN
RAISE Notice 'No data found';
RETURN NEW;
END;
return new
$func_ex$ LANGUAGE plpgsql;
-- End of Function
-- Creation of Trigger
CREATE TRIGGER insert_trigger1 AFTER update of empname
ON emp_table1 EXECUTE PROCEDURE func_ex();
Я хочу предотвратить неявный откат всей транзакции, когда в триггерных функциях произошло исключение. – user1581721
@ user1581721, но вы уже показываете, как это сделать в своем вопросе, поэтому я не понимаю, что вы просите. –
Имея Nested Begin .. Исключительные блоки Я мог бы иметь несколько точек сохранения в триггерных функциях. – user1581721