PostreSQL中的INSERT和事务序列化[英] INSERT and transaction serialization in PostreSQL

本文是小编为大家收集整理的关于PostreSQL中的INSERT和事务序列化的处理方法,想解了PostreSQL中的INSERT和事务序列化的问题怎么解决?PostreSQL中的INSERT和事务序列化问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我有一个问题.事务隔离级别设置为可序列化.当一个用户打开一个事务并在"table1"中插入或更新数据,然后另一个用户打开一个事务并尝试将数据插入同一个表时,第二个用户是否需要等待直到第一个用户提交事务?

推荐答案

一般情况下不会.第二个事务只是插入,因此除非需要进行唯一索引检查或其他触发器,否则可以无条件插入数据.在唯一索引(包括主键)的情况下,如果两个事务都在更新具有相同值的行,它将阻塞,例如:

-- Session 1                           -- Session 2
CREATE TABLE t (x INT PRIMARY KEY);
BEGIN;
INSERT INTO t VALUES (1);
                                       BEGIN;
                                       INSERT INTO t VALUES (1);  -- blocks here
COMMIT;
                                       -- finally completes with duplicate key error

在可能影响其他事务插入的更新的情况下,情况不太明显.我了解 PostgreSQL 在这种情况下还不支持"真正的"可序列化.我不知道其他 SQL 系统对它的支持程度.

参见 http://www.postgresql.org/docs/current/交互/mvcc.html

本文地址:https://www.itbaoku.cn/post/1763950.html