温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

postgresql怎样调事务隔离

发布时间:2026-09-27 18:25:08 来源:亿速云 阅读:88 作者:小樊 栏目:数据库

在 PostgreSQL 中,事务隔离级别(Transaction Isolation Level)可以在会话级或事务级进行设置。下面按常见用法说明。


一、PostgreSQL 支持的隔离级别

PostgreSQL 支持以下 4 种标准隔离级别:

  1. READ UNCOMMITTED
    • PostgreSQL 实际会当作 READ COMMITTED
  2. READ COMMITTED(默认)
  3. REPEATABLE READ
  4. SERIALIZABLE

二、在事务中设置隔离级别(推荐)

1️⃣ 开启事务时指定

BEGIN TRANSACTION ISOLATION LEVEL REPEATABLE READ;
-- 你的 SQL
COMMIT;

常见写法:

BEGIN ISOLATION LEVEL SERIALIZABLE;
-- SQL
COMMIT;

2️⃣ 事务中途修改(必须在 BEGIN 后)

BEGIN;
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

⚠️ 注意:
SET TRANSACTION 只能在事务开始后、第一条查询前使用。


三、设置整个会话的隔离级别

SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;

或简写:

SET TRANSACTION ISOLATION LEVEL READ COMMITTED;

该设置对当前连接有效,断开后失效。


四、修改数据库默认隔离级别(全局)

1️⃣ 修改单个数据库

ALTER DATABASE your_db
SET default_transaction_isolation = 'repeatable read';

2️⃣ 修改用户默认

ALTER ROLE your_user
SET default_transaction_isolation = 'serializable';

3️⃣ 修改实例级(postgresql.conf)

default_transaction_isolation = 'read committed'

修改后需重启或 SELECT pg_reload_conf();


五、查看当前隔离级别

SHOW transaction_isolation;

或在事务中:

SELECT current_setting('transaction_isolation');

六、示例对比

READ COMMITTED(默认)

BEGIN;
SELECT * FROM accounts;
-- 其他事务提交的修改会看到
COMMIT;

SERIALIZABLE(最强隔离)

BEGIN ISOLATION LEVEL SERIALIZABLE;
SELECT * FROM accounts;
-- 若有并发冲突,提交时报错
COMMIT;

七、常见注意点

  • PostgreSQL 没有真正的 READ UNCOMMITTED
  • REPEATABLE READ 不会出现脏读、不可重复读
  • SERIALIZABLE 通过 SSN(Serializable Snapshot Isolation)实现
  • 高隔离级别可能增加锁冲突和重试概率

如果你有具体业务场景(如库存、订单、并发更新),我可以帮你选最合适的隔离级别。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手