Sie vergleichen Postgres-XL mit der PostgreSQL-Hauptdokumentation. Zwei unterschiedliche Produkte, jedoch mit einer gemeinsamen Geschichte. Postgres-XL hat viele von Änderungen ab Lager PostgreSQL.
CREATE TRIGGER
sollte in den Pg-Dokumenten aufgeführt sein und ist es nicht, und das ist ein Versehen.
Ein kurzer Blick auf den Quellcode zeigt, dass CREATE TRIGGER
nimmt ein ShareRowExclusiveLock
, also stimmt in diesem Fall die Dokumentation von XL mit dem Verhalten von PostgreSQL überein.
Sie können dies selbst überprüfen, ohne sich die Quellen anzusehen, indem Sie etwa so vorgehen:
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;
... was zeigt, dass ich mich beim Lesen der Quellen geirrt habe, denn:
locktype | relation
mode | AccessExclusiveLock
es brauchte ein AccessExclusiveLock.