sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Qué bloqueo, si lo hay, usa 'CREATE TRIGGER' en PostgreSQL 9.4.2?

Está comparando Postgres-XL con la documentación principal de PostgreSQL. Dos productos diferentes, aunque con una historia compartida. Postgres-XL tiene muchas de cambios de Stock PostgreSQL.

CREATE TRIGGER Sin embargo, debería estar incluido en los documentos de Pg y no lo está, y eso es un descuido.

Una mirada rápida al código fuente muestra que CREATE TRIGGER toma un ShareRowExclusiveLock , por lo que en este caso la documentación de XL coincide con el comportamiento de PostgreSQL.

Puede verificar esto usted mismo sin mirar las fuentes haciendo algo como esto:

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;

... lo que demuestra que me equivoqué en mi lectura de las fuentes, porque:

locktype | relation
mode     | AccessExclusiveLock

tomó un AccessExclusiveLock.