PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Que bloqueio, se houver, 'CREATE TRIGGER' usa no PostgreSQL 9.4.2


Você está comparando o Postgres-XL com a documentação principal do PostgreSQL. Dois produtos diferentes, embora com uma história comum. Postgres-XL tem muitos de mudanças do estoque PostgreSQL.

CREATE TRIGGER deve ser listado nos documentos Pg e não é, e isso é um descuido.

Uma rápida olhada no código-fonte mostra que CREATE TRIGGER recebe um ShareRowExclusiveLock , então neste caso a documentação do XL corresponde ao comportamento do PostgreSQL.

Você pode verificar isso sozinho sem olhar as fontes fazendo algo assim:
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;

... o que mostra que eu estava errado na minha leitura das fontes, porque:
locktype | relation
mode     | AccessExclusiveLock

levou um AccessExclusiveLock.