sql >> Databasteknik >  >> RDS >> PostgreSQL

Vilket lås, om något, använder 'CREATE TRIGGER' i PostgreSQL 9.4.2

Du jämför Postgres-XL med den huvudsakliga PostgreSQL-dokumentationen. Två olika produkter, om än med en delad historia. Postgres-XL har massor av förändringar från lager PostgreSQL.

CREATE TRIGGER bör anges i Pg-dokumenten och är det dock inte, och det är ett förbiseende.

En snabb titt på källkoden visar att CREATE TRIGGER tar en ShareRowExclusiveLock , så i det här fallet matchar XL:s dokumentation PostgreSQL:s beteende.

Du kan kontrollera detta själv utan att titta på källorna genom att göra något så här:

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;

... vilket visar att jag hade fel när jag läste källorna, eftersom:

locktype | relation
mode     | AccessExclusiveLock

det tog ett AccessExclusiveLock.




  1. Relationella vs icke-relationella databaser:Vad är skillnaden?

  2. Skillnaden mellan sys.parameters, sys.system_parameters och sys.all_parameters i SQL Server

  3. Hur bestämmer man optimala MySQL-tabellindex, när innehållet i WHERE-klausulen varierar?

  4. Hur man öppnar en tabell i designvy i Microsoft Access