在 postgresql 中的存储过程中设置事务隔离级别

时间:2021-06-02 10:49:01

标签: postgresql

我可以在 postgresql 的存储过程中设置事务级别吗? 在下面调用 sp1 时出错:

<块引用>

错误:必须在任何查询之前调用 SET TRANSACTION ISOLATION LEVEL

CREATE OR REPLACE PROCEDURE sp1()
LANGUAGE 'plpgsql'
AS $BODY$
begin
    update table1 set a=1;
    SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
update table1 set a=2;
END;
$BODY$;

1 个答案:

答案 0 :(得分:1)

您无法设置隔离级别,因为您已经在同一事务中执行了 UPDATE 语句。

将事务设置为隔离级别 READ UNCOMMITTED 不会产生任何影响,因此您只需删除该语句即可。此隔离级别在采用阻塞读锁以牺牲一致性为代价实现良好并发的数据库中非常有用。但是由于 PostgreSQL 中的写入器不会阻止读取器,因此您不需要这个拐杖。