PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Quel verrou, le cas échéant, 'CREATE TRIGGER' utilise-t-il dans PostgreSQL 9.4.2

Vous comparez Postgres-XL avec la documentation principale de PostgreSQL. Deux produits différents, mais avec une histoire commune. Postgres-XL a beaucoup des modifications du stock PostgreSQL.

CREATE TRIGGER devrait être répertorié dans les documents Pg et ne l'est pas, cependant, et c'est un oubli.

Un rapide coup d'œil au code source montre que CREATE TRIGGER prend un ShareRowExclusiveLock , donc dans ce cas, la documentation de XL correspond au comportement de PostgreSQL.

Vous pouvez vérifier cela vous-même sans regarder les sources en faisant quelque chose comme ceci :

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;

... ce qui montre que je me suis trompé sur ma lecture des sources, car :

locktype | relation
mode     | AccessExclusiveLock

il a fallu un AccessExclusiveLock.