sql >> Databáze >  >> RDS >> PostgreSQL

Jaký zámek, pokud existuje, používá 'CREATE TRIGGER' v PostgreSQL 9.4.2

Porovnáváte Postgres-XL s hlavní dokumentací PostgreSQL. Dva různé produkty, i když se společnou historií. Postgres-XL má spoustu změn ze skladu PostgreSQL.

CREATE TRIGGER by měl být uveden v Pg docs, ale není, a to je přehlédnutí.

Rychlý pohled na zdrojový kód ukazuje, že CREATE TRIGGER trvá ShareRowExclusiveLock , takže v tomto případě dokumentace XL odpovídá chování PostgreSQL.

Můžete to zkontrolovat sami, aniž byste se dívali na zdroje, a to tak, že uděláte něco takového:

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;

... což ukazuje, že jsem se mýlil ve čtení zdrojů, protože:

locktype | relation
mode     | AccessExclusiveLock

trvalo to AccessExclusiveLock.




  1. Chybějící hodnota pro id primárního klíče Doctrine Symfony2

  2. script (while-loop) se zastaví a nemá žádný výstup, když je vybráno více sloupců

  3. Možné vysvětlení na WITH RECURSIVE Query Postgres

  4. Nastavte SQLAlchemy na použití PostgreSQL SERIAL pro generování identity