2016-07-11 1 views
0

Einige Tabellen hat Triggerfunktionen:Gegeben eine Triggerfunktion Name - wie bekomme ich Tabellen, auf denen es gesetzt ist?

CREATE TRIGGER x 
    AFTER INSERT OR UPDATE OR DELETE 
    ON tab_1 FOR EACH ROW 
    EXECUTE PROCEDURE trige2(); 

Also im Grunde, wenn ich den Tabellennamen kenne ich die Auslöser leicht bekommen kann becuase es in den Tabelleneigenschaften in PgAdmin ist.

Aber was passiert, wenn ich nur den Namen der Triggerprozedur trige2 kenne und ich möchte eine Liste aller Tabellen bekommen, auf die der Trigger aufgerufen wird.

Im obigen Beispiel sollte das Ergebnis tab_1 sein

Antwort

1

Das durch den Beitritt pg_trigger, pg_class und pg_proc getan werden kann

SELECT ps.nspname as function_schema, 
     p.proname as trigger_function, 
     ts.nspname as table_schema, 
     tbl.relname as table_name, 
     trg.tgname as trigger_name 
FROM pg_trigger trg 
    JOIN pg_class tbl on tbl.oid = trg.tgrelid 
    JOIN pg_namespace ts on ts.oid = tbl.relnamespace 
    JOIN pg_proc p on p.oid = trg.tgfoid 
    JOIN pg_namespace ps on ps.oid = p.pronamespace 

Mit der oben erhalten Sie die Informationen können unter Verwendung von entweder liefert den Tabellennamen where tbl.relname = 'tab_1' oder die Bereitstellung des Triggernamens über where trg.tgname = 'x' oder die Angabe des Funktionsnamens: where p.proname = 'trige2'

Verwandte Themen