在 PostgreSQL 中,查看事务隔离级别的方法如下:
使用 SHOW 命令直接查看当前会话的隔离级别:
SHOW TRANSACTION ISOLATION LEVEL;
- 示例输出:
transaction_isolation
---------------------
read committed
SHOW default_transaction_isolation;
SELECT name, setting FROM pg_settings WHERE name = 'default_transaction_isolation';
- 示例输出:
name | setting
-------------------------|----------
default_transaction_isolation | read committed
在事务块中使用 current_setting 函数:
BEGIN;
SELECT current_setting('transaction_isolation');
COMMIT;
PostgreSQL 支持的隔离级别包括:
READ COMMITTED(默认)
REPEATABLE READ
SERIALIZABLE
READ UNCOMMITTED(实际行为与 READ COMMITTED 相同)
-
设置当前会话的隔离级别:
SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL [隔离级别];
例如:
SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL REPEATABLE READ;
-
设置全局默认隔离级别:
- 修改
postgresql.conf 文件中的 default_transaction_isolation 参数:
default_transaction_isolation = 'read committed' -- 可选值:read committed, repeatable read, serializable
- 执行
SELECT pg_reload_conf(); 使配置生效。
READ UNCOMMITTED 的特殊性:PostgreSQL 没有真正实现读未提交隔离级别,设置该级别会被当作 READ COMMITTED 处理。
- 事务内的隔离级别:使用
BEGIN 或 START TRANSACTION 时,可以指定隔离级别:
BEGIN ISOLATION LEVEL REPEATABLE READ;
通过以上方法,您可以快速查看当前会话、事务或全局的隔离级别,并根据需求调整。