Hoe de trigger(s) te krijgen die zijn gekoppeld aan een weergave of tabel in PostgreSQL

Ik heb één vereiste dat ik de lijst met triggers moet krijgen die aan de gegeven tabel/view zijn gekoppeld.
Kan iemand me helpen om de triggers voor een tabel in PostgreSQL te vinden?


Antwoord 1, autoriteit 100%

Hiermee krijg je alle details terug die je wilt weten

select * from information_schema.triggers

of als u de resultaten van een specifieke tabel wilt sorteren, kunt u het proberen

SELECT event_object_table
      ,trigger_name
      ,event_manipulation
      ,action_statement
      ,action_timing
FROM  information_schema.triggers
WHERE event_object_table = 'tableName' -- Your table name comes here
ORDER BY event_object_table
     ,event_manipulation

het volgende geeft de tabelnaam terug die een trigger heeft

select relname as table_with_trigger
from pg_class
where pg_class.oid in (
        select tgrelid
        from pg_trigger
        )

Antwoord 2, autoriteit 48%

Het probleem met de weergave information_schema.triggers(behalve dat het traag is) is, per documentatie:

De weergavetriggers bevat alle triggers die zijn gedefinieerd in de huidige
database op tabellen en views die de huidige gebruiker bezit of heeft
ander privilege dan SELECTaan.

Dit betekent dat je alleen triggers te zien krijgt waarvoor je de juiste rechten hebt.

Om alletriggers voor een tabel te zien, kijk in de systeemcatalogus pg_trigger

SELECT tgname
FROM   pg_trigger
WHERE  tgrelid = 'myschema.mytbl'::regclass; -- optionally schema-qualified

Werkt voor tabellen enweergaven.
Of je zou een GUI zoals pgAdmin kunnen gebruiken die de lijst toont onder het tabelknooppunt in de objectbrowser.


Antwoord 3, autoriteit 12%

In het psql-opdrachtregelprogramma kunt u ook \dS <table_name>gebruiken (van https://serverfault.com/questions/331024/how-can-i-show-the-content-of-a-trigger-with- psql)


Antwoord 4, autoriteit 2%

select    tgname
    ,relname
    ,tgenabled
    ,nspname    from    pg_trigger 
    join    pg_class    on    (pg_class.oid=pg_trigger.tgrelid) 
    join    pg_namespace    on    (nspowner=relowner);
tgenabled (To check if its disabled)
O = trigger fires in "origin" and "local" modes, 
D = trigger is disabled, 
R = trigger fires in "replica" mode,
A = trigger fires always.

Antwoord 5

Ik heb gemerkt dat infoschema GEEN belangrijke relatietabelinformatie over triggers bevat (tenminste in postgres 10). pg_triggers bevat deze info. Merkte ook op dat datagep geen relatietabellen zal scripten wanneer je de triggers script, dus ik neem aan dat het infoschema gebruikt om ze te scripten (en dan zou je tabel de relatietabellen missen, en de triggerfuncties die ernaar verwijzen zouden mislukken). PG-documentatie zegt dat kolommen in infoschema voor action_reference_old_table van toepassing zijn op een functie die niet beschikbaar is in postgres (10), maar ik gebruik ze zeker, en ze verschijnen zeker in pg_triggers. Ter info.


Antwoord 6

\df geeft een lijst van alle functies, inclusief triggers.

\dft geeft een lijst van alle triggers.

Other episodes