sql >> Database >  >> RDS >> PostgreSQL

Welk slot, indien aanwezig, gebruikt 'CREATE TRIGGER' in PostgreSQL 9.4.2

Je vergelijkt Postgres-XL met de belangrijkste PostgreSQL-documentatie. Twee verschillende producten, zij het met een gedeelde geschiedenis. Postgres-XL heeft loten van wijzigingen uit voorraad PostgreSQL.

CREATE TRIGGER zou in de Pg-documenten moeten worden vermeld en is dat echter niet, en dat is een vergissing.

Een snelle blik op de broncode laat zien dat CREATE TRIGGER neemt een ShareRowExclusiveLock , dus in dit geval komt de documentatie van XL overeen met het gedrag van PostgreSQL.

Je zou dit zelf kunnen controleren zonder naar de bronnen te kijken door zoiets als dit te doen:

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;

... waaruit blijkt dat ik het bij het verkeerde eind had bij het lezen van de bronnen, omdat:

locktype | relation
mode     | AccessExclusiveLock

er was een AccessExclusiveLock voor nodig.




  1. IN-clausule met NULL of IS NULL

  2. PG::Error - numeriek veld overloop op Heroku

  3. sql server subquery met een door komma's gescheiden resultatenset

  4. Selecteer minimaal twee data