PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Quale blocco, se presente, utilizza 'CREATE TRIGGER' in PostgreSQL 9.4.2

Stai confrontando Postgres-XL con la documentazione principale di PostgreSQL. Due prodotti diversi, seppur con una storia condivisa. Postgres-XL ha molti di modifiche da magazzino PostgreSQL.

CREATE TRIGGER dovrebbe essere elencato nei documenti Pg e non lo è, tuttavia, e questa è una svista.

Una rapida occhiata al codice sorgente mostra che CREATE TRIGGER accetta un ShareRowExclusiveLock , quindi in questo caso la documentazione di XL corrisponde al comportamento di PostgreSQL.

Puoi verificarlo tu stesso senza guardare le fonti facendo qualcosa del genere:

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;

... il che dimostra che ho sbagliato a leggere le fonti, perché:

locktype | relation
mode     | AccessExclusiveLock

ci voleva un AccessExclusiveLock.