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

Hvilken lås, hvis nogen, bruger 'CREATE TRIGGER' i PostgreSQL 9.4.2

Du sammenligner Postgres-XL med den primære PostgreSQL-dokumentation. To forskellige produkter, dog med en fælles historie. Postgres-XL har masser af ændringer fra lager PostgreSQL.

CREATE TRIGGER bør være opført i Pg-dokumenterne og er det dog ikke, og det er en forglemmelse.

Et hurtigt kig på kildekoden viser, at CREATE TRIGGER tager en ShareRowExclusiveLock , så i dette tilfælde matcher XL's dokumentation PostgreSQL's adfærd.

Du kan selv tjekke dette uden at se på kilderne ved at gøre sådan noget:

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;
 

... hvilket viser, at jeg tog fejl i min læsning af kilderne, fordi:

locktype | relation mode | AccessExclusiveLock

det tog en AccessExclusiveLock.




  1. Parametriseret IN-klausul i udarbejdet erklæring ved hjælp af MySql, PHP og ADODB

  2. SQLite Vis tabeller

  3. Hvorfor returnerer denne SQL INSERT-sætning en syntaksfejl?

  4. MYSQLI - WHERE IN array