Я бы не советовал, поскольку пользователь может нажать на нежелательную кнопку. Я никогда не видел такого вида UX в коммерческих программах.
Обычно программное обеспечение предлагает пользователю нажать кнопку с комбинацией клавиш, начинающейся с Alt (например, «Alt + O» для OK). Обычно, когда пользователь нажимает Alt, O OK будет подчеркнут, чтобы предположить, что такая функция существует. Это часто реализуемо неявно как мнемоника в механизме диалога (например, Java Swing).
Хорошо у Вас есть возможность использовать вложенные транзакции внутри postgresql использование SavePoints.
Возьмите этот пример кода:
CREATE TABLE t1 (a integer PRIMARY KEY);
CREATE FUNCTION test_exception() RETURNS boolean LANGUAGE plpgsql AS
$$BEGIN
INSERT INTO t1 (a) VALUES (1);
INSERT INTO t1 (a) VALUES (2);
INSERT INTO t1 (a) VALUES (1);
INSERT INTO t1 (a) VALUES (3);
RETURN TRUE;
EXCEPTION
WHEN integrity_constraint_violation THEN
RAISE NOTICE 'Rollback to savepoint';
RETURN FALSE;
END;$$;
BEGIN;
SELECT test_exception();
NOTICE: Rollback to savepoint
test_exception
----------------
f
(1 row)
COMMIT;
SELECT count(*) FROM t1;
count
-------
0
(1 row)
Возможно, это выручит Вас немного.
Я закончил тем, что 'решил' свою проблему из полосы - я использую сценарий жемчуга для переделывания входных сценариев, чтобы устранить их транзакцию/вызовы подтверждения запуска, затем продвинуть их всех в один файл, который получает свою собственную транзакцию/фиксацию запуска.