Ответ 1
Да, потому что он выполнен в рамках одной транзакции. Если сбой триггера, вставка/обновление также потерпят неудачу. Просто выполните тест, выполняющий запрос, который не сработает (SELECT таблица, которая не существует), и вы можете увидеть, как все работает и как ваше приложение будет себя вести.
CREATE OR REPLACE FUNCTION foo() RETURNS TRIGGER
AS
$$
BEGIN
EXECUTE 'SELECT fail';
END;
$$
LANGUAGE plpgsql;