У меня есть функция plpgsql, которая выполняет несколько вставок в несколько таблиц.
Я также триггер, который делает некоторые вещи, например, уведомляет некоторые службы.
Процесс выглядит так:
- Вставить в таблицу A
- Триггер выполнен на столе A
- Функция не работает
вставить в таблицу B
И затем транзакция откатывается, и у меня нет данных в таблице A, но триггер выполнен.
Кроме того, на столе А нет никакого УДАЛЕНИЯ.
Мой триггер и функция:
CREATE OR REPLACE FUNCTION some_function() RETURNS trigger AS
$$
BEGIN
PERFORM pg_notify('pgchannel1', row_to_json(new)::text);
RETURN NULL;
END
$$ LANGUAGE plpgsql;
CREATE TRIGGER some_trigger
AFTER INSERT
ON some_table
FOR EACH ROW
EXECUTE PROCEDURE some_function();
Я бы хотел, чтобы этот процесс был таким:
- Вставить в таблицу A
- Вставить в таблицу B
- Триггер, выполняемый в таблице A / Триггер, выполняемый после выполнения функции
Как я могу отловить, что транзакция откатилась и не выполняет триггер?
Есть ли способ вызвать состояние функции?