PostgreSQL默许的阻隔等级是读提交(RC)。PostgreSQL内部只结束了三种不同的阻隔等级,假定设置阻隔等级为”读未提交”,业务的四个特性则其行为和读提交完全相同,即P业务文书ostgreSQL没有结束读未提交。

下面看一下怎样检查以及设置PostgreSQL的阻隔等级。

检查PostgreSQL的阻隔等级

办法一:业务检查默许的阻隔等级

检查默许的阻隔等级:show default_transaction_is业务文书olat业务所是干什么的ion;

postgres=# show default_transact业务文书ion_isolation;业务所
default_transaction_isolation
-------------------------------
r业务ead committed
(1 行记载)

办法二:检查默许的阻隔等级

能够从PG业务局的体系装备表pg_set业务tings中检查默业务性作业许的阻隔等级

postgres=# SELECT name, setting FROM pg_settings WHERE name = 'de业务性作业是什么意思fault_transaction_isolation';
name              |业务所    setting
-------------业务性作业------------------+-----业务性作业-----------
default_transaction_isolation | read committed
(1 行记载)

检查当时会话的阻隔等级

检查当时会话(联接)的阻隔等级:

  • show transaction_isolation;
  • SELECT current_setting('t业务ransaction_isolation');
postgres=# show transaction_isolation;
transaction_isolation
-----------------------
read committed
(1 行记载)

装备PostgreSQL的阻隔等级业务所是干什么的

设置当时业务的阻隔等级(只能在业务块内修改)

在PostgreSQL中,SET TRANSACT业务所是干什么的ION能够用来修改业务的阻隔等级。但是它只能在事业务所务块(tr业务性作业是什么意思ansaction blocks)中实行。

SET TRANSACTION ISOLATION LEVEL业务所是干什么的 [ SERIALIZABLE |业务局 REPEATABLE READ | READ CO业务所是干什么的MMITTED | READ UNCOMMITTED ];

如下,修改PgSQL的阻隔等级:

postgres业务所是干什么的=# SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
警告:  SET TRANSACTION 只能在业务块中业务性作业运用
SET
postgres=# begin transaction;
BEGIN
postgres=# show transaction_isolation;
transaction_isolation
---------------业务所--------
read committed
(1 行记载)
postgres=# SE业务文书T TRANSACT业务文书ION ISOLATION LEVE业务文书L REPEATABLE READ;
SE业务员T
postgres=# show trans业务局action_isolati业务所on;
transaction_isolation
-----------------------
repeatable read
(1 行记载)

以指定的阻隔等级开始业务

能够直接在开始业务时指定阻隔等级:

postg业务性作业是什么意思res=# BE业务部GIN TRANSACTION ISOLATION LEVEL REP业务文书EATABLE READ;
BEGIN
postgres=# show transaction_isolation;
transaction_isolation
-----------------------
repeatable read
(1 行记载)

设置当时会话中的业务隔业务所绝等级

设置当时会话的阻隔等级语法有些杂乱,语法如下所示:

SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION业务性作业是什么意思 L业务局EVEL [ SERIALIZABLE | REPEATABLE READ | READ COMMITT业务员ED | READ U业务部NCOMMITTED ]

SQL句子永久修改全局的业务阻隔等级

在指令行中,或者说运用SQL句子,也能够结束永久修改全局的业务阻隔等级,指令为:ALTER SYSTEM SET default业务阻隔等级_trans业务局action_isolation业务文书 TO 'xxx'

修改结束后,实行SELECT pg_reload_conf()业务部;SQL句子从头加载PostgreSQL装备,使其收效。这样那就不用重启pg服务了。

postgres=# ALTER SYSTEM SET default_transaction_isolation TO业务局 'REPEATABLE READ';
ALTER SYSTEM
postgres=# SELECT pg_reload_conf();
pg_reload_conf
---业务的四个特性-------------
t
(1业务性作业是什么意思 行记载)
postgres=# show default_transaction_isolation;
default_transaction_isolation
----------业务局---------------------
repeatable read
(1 行记载)
postgres=# SELECT current_setting('transaction_i业务所solation');
current_setting
-----------------
repeatable read
(1 行记载)

这样装备是永久收效的,P业务性作业ostgreSQL重启后仍有用,详业务的四个特性细的修改方位暂时不确定,因为检查装备文业务阻隔等级postgresql.业务性作业conf,其间的设置并没有修改。即ALTER SYSTEM SET并没有影响配业务的四个特性备文件。

PG装备文件永久修改业务的阻隔等业务阻隔等级业务局

Postgre业务的四个特性SQL的装备文件postgresql.conf中有一项关于阻隔等级的装备,修改后需求reload从头加载收效。这样能够永久修改全局的阻隔等级。

如下:

#def业务性作业是什么意思ault_transaction_isolation = 'read committed'