gpt4 book ai didi

postgresql - 'CREATE TRIGGER' 在 PostgreSQL 9.4.2 中使用什么锁(如果有)

转载 作者:行者123 更新时间:2023-11-29 11:56:45 25 4
gpt4 key购买 nike

根据 postgres-xlCREATE TRIGGER 使用SHARE ROW EXCLUSIVE 锁,但是根据official Postgres docs对于 SHARE ROW EXCLUSIVE:

This lock mode is not automatically acquired by any PostgreSQL command.

最佳答案

您正在将 Postgres-XL 与主要的 PostgreSQL 文档进行比较。两种不同的产品,尽管有着共同的历史。 Postgres-XL 有 很多 普通 PostgreSQL 的变化。

CREATE TRIGGER 应该列在 Pg 文档中,但实际上并没有,这是一种疏忽。

快速查看源代码会发现 CREATE TRIGGER 采用 ShareRowExclusiveLock,因此在这种情况下 XL 的文档与 PostgreSQL 的行为相匹配。

您可以通过执行以下操作自行检查,而无需查看源代码:

CREATE TABLE test();

CREATE OR REPLACE FUNCTION dummy_tg() RETURNS TRIGGER
LANGUAGE plpgsql AS $$ BEGIN END; $$;

BEGIN;

CREATE TRIGGER blah BEFORE INSERT ON test FOR EACH ROW EXECUTE PROCEDURE dummy_tg();

\x

SELECT * FROM pg_locks
WHERE pid = pg_backend_pid()
AND relation = 'test'::regclass;

ROLLBACK;

...这表明我对来源的阅读是错误的,因为:

locktype | relation
mode | AccessExclusiveLock

它需要一个 AccessExclusiveLock。

关于postgresql - 'CREATE TRIGGER' 在 PostgreSQL 9.4.2 中使用什么锁(如果有),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33902679/

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