gpt4 book ai didi

postgresql - Postgres 中的 "SHARE ROW EXCLUSIVE"模式锁定

转载 作者:行者123 更新时间:2023-11-29 13:03:44 26 4
gpt4 key购买 nike

我有以下功能,同时被多个进程使用。但是我有时在插入操作中遇到重复错误。我以为是锁的问题所以我换了一个ACCESS EXCLUSIVE锁,但是不行,因为它锁了整个表。使用 SHARE ROW EXCLUSIVE 模式似乎可以正常工作,但我对性能和访问有一些疑问。其他进程将能够访问该表吗?与前一个锁(ROW EXCLUSIVE)相比,这个锁更慢?

CREATE OR REPLACE FUNCTION insert_id(...) AS $$
BEGIN
LOCK table IN ROW EXCLUSIVE MODE;

-- select next available id
SELECT
max(id) + 1
INTO
o_id
FROM
table
WHERE
id = i_id;

-- insert id
INSERT INTO
table
(id)
VALUES
(o_id);

END;
$$ LANGUAGE plpgsql;

最佳答案

所有的锁都是一样的“速度”。重要的是他们还阻止了什么。

在这种情况下,您需要的是一个EXCLUSIVE 锁。这会阻止并发插入/更新/删除,但不会阻止 SELECT

就我个人而言,我会完全放弃这个想法。不要试图在你的数据库中实现无间隙序列。相反,在使用 row_number() 窗口函数进行查询时按需生成它们。

关于postgresql - Postgres 中的 "SHARE ROW EXCLUSIVE"模式锁定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21290710/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com