Будет ли триггер AFTER в Postgres блокировать вставку/обновление?

Если я установил триггер AFTER в PostgreSQL для запуска после вставки/обновления, вызывающее программное обеспечение должно ждать завершения триггера, прежде чем возвращать управление вызывающему программному обеспечению? Или триггер запускается самостоятельно за кадром?

Ответ 1

Да, потому что он выполнен в рамках одной транзакции. Если сбой триггера, вставка/обновление также потерпят неудачу. Просто выполните тест, выполняющий запрос, который не сработает (SELECT таблица, которая не существует), и вы можете увидеть, как все работает и как ваше приложение будет себя вести.

CREATE OR REPLACE FUNCTION foo() RETURNS TRIGGER
AS
$$
BEGIN
  EXECUTE 'SELECT fail';
END;
$$
LANGUAGE plpgsql;