PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jakiej blokady, jeśli w ogóle, używa 'CREATE TRIGGER' w PostgreSQL 9.4.2?

Porównujesz Postgres-XL z główną dokumentacją PostgreSQL. Dwa różne produkty, choć ze wspólną historią. Postgres-XL ma dużo zmian z magazynu PostgreSQL.

CREATE TRIGGER powinien być wymieniony w dokumentacji Pg i nie jest, a to jest przeoczenie.

Szybkie spojrzenie na kod źródłowy pokazuje, że CREATE TRIGGER przyjmuje ShareRowExclusiveLock , więc w tym przypadku dokumentacja XL pasuje do zachowania PostgreSQL.

Możesz to sprawdzić samodzielnie, nie patrząc na źródła, robiąc coś takiego:

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 pokazuje, że myliłem się co do odczytu źródeł, ponieważ:

locktype | relation
mode     | AccessExclusiveLock

wymagało to AccessExclusiveLock.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Błąd:kolumna nie istnieje

  2. Jakie jest domyślne hasło do Postgresa

  3. Obsługa WYJĄTKU i zwracanie wyniku z funkcji

  4. Postgres:Dlaczego wydajność jest tak słaba w przypadku podselekcji z przesunięciem/limitem?

  5. Co to jest LEFT JOIN w PostgreSQL