Я хочу запустить следующий блок кода в транзакции, чтобы в случае сбоя sql statements
вся транзакция была прервана. Если я запускаю следующий блок как есть, выполняется ли он в транзакции или мне нужно запустить его внутри BEGIN; ... COMMIT;
DO $$
DECLARE
readonly_exists int;
BEGIN
SELECT COUNT(*) INTO readonly_exists FROM information_schema.enabled_roles
WHERE role_name = 'readonly';
IF readonly_exists = 0 THEN
<SQL STATEMENT 1>
<SQL STATEMENT 2>
<SQL STATEMENT 3>
ELSE
RAISE EXCEPTION 'readonly role already exists';
END IF;
END$$;