在 PostgreSQL 中,事务隔离级别(Transaction Isolation Level)可以在会话级或事务级进行设置。下面按常见用法说明。
PostgreSQL 支持以下 4 种标准隔离级别:
READ UNCOMMITTED
READ COMMITTEDREAD COMMITTED(默认)REPEATABLE READSERIALIZABLEBEGIN TRANSACTION ISOLATION LEVEL REPEATABLE READ;
-- 你的 SQL
COMMIT;
常见写法:
BEGIN ISOLATION LEVEL SERIALIZABLE;
-- SQL
COMMIT;
BEGIN;
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
⚠️ 注意:
SET TRANSACTION 只能在事务开始后、第一条查询前使用。
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
或简写:
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
该设置对当前连接有效,断开后失效。
ALTER DATABASE your_db
SET default_transaction_isolation = 'repeatable read';
ALTER ROLE your_user
SET default_transaction_isolation = 'serializable';
default_transaction_isolation = 'read committed'
修改后需重启或 SELECT pg_reload_conf();
SHOW transaction_isolation;
或在事务中:
SELECT current_setting('transaction_isolation');
BEGIN;
SELECT * FROM accounts;
-- 其他事务提交的修改会看到
COMMIT;
BEGIN ISOLATION LEVEL SERIALIZABLE;
SELECT * FROM accounts;
-- 若有并发冲突,提交时报错
COMMIT;
REPEATABLE READ 不会出现脏读、不可重复读SERIALIZABLE 通过 SSN(Serializable Snapshot Isolation)实现如果你有具体业务场景(如库存、订单、并发更新),我可以帮你选最合适的隔离级别。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。