PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Welche Sperre verwendet „CREATE TRIGGER“ gegebenenfalls in PostgreSQL 9.4.2

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.