【发布时间】:2020-02-27 23:26:19
【问题描述】:
我想在事务中运行以下代码块,以便如果任何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$$;
【问题讨论】: