在PostgreSQL 9.4.2中,'CREATE TRIGGER'使用什么锁(如果有)?[英] What lock, if any, does 'CREATE TRIGGER' use in PostgreSQL 9.4.2

本文是小编为大家收集整理的关于在PostgreSQL 9.4.2中,'CREATE TRIGGER'使用什么锁(如果有)?的处理方法,想解了在PostgreSQL 9.4.2中,'CREATE TRIGGER'使用什么锁(如果有)?的问题怎么解决?在PostgreSQL 9.4.2中,'CREATE TRIGGER'使用什么锁(如果有)?问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

根据 postgres-xl ,CREATE TRIGGER使用锁,但根据官方Postgres Docs for C1>:

锁定模式不会由任何PostgreSQL自动获取 命令.

推荐答案

您正在将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.

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