运行 postgres 事务中的代码块
Run code block in a transaction in postgres
我想 运行 事务中的以下代码块,这样如果任何 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$$;
任何 SQL 语句在单个事务中总是 运行s(此规则的例外是 CALL
)。
因此您的 DO
语句将 运行 在单个事务中,并且所有三个 SQL 语句都成功,或者全部回滚。
我想 运行 事务中的以下代码块,这样如果任何 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$$;
任何 SQL 语句在单个事务中总是 运行s(此规则的例外是 CALL
)。
因此您的 DO
语句将 运行 在单个事务中,并且所有三个 SQL 语句都成功,或者全部回滚。