2017-10-14 2 views
2

Par exemple, je crée un tel déclencheur:Je voudrais savoir quelle table stocke la requête de création d'un déclencheur pour l'événement déclencheur par exemple

CREATE EVENT TRIGGER tr_event_begin 
ON ddl_command_start 
EXECUTE PROCEDURE event_trigger_begin (); 

De quelle table peut maintenant être tiré dans la même forme? Ou dans des parties au moins. information_schema.triggers ne le contient pas puisqu'il s'agit d'un déclencheur d'événement plutôt que d'un déclencheur ordinaire.

+0

Voir [Comment vérifier si le déclencheur existe dans PostgreSQL?] (https://stackoverflow.com/a/33174794/1995738) – klin

+0

Cela fonctionnera avec les déclencheurs normaux, mais j'ai besoin de déclencher des événements. –

+0

Copie possible de [Comment vérifier si le déclencheur existe dans PostgreSQL?] (Https://stackoverflow.com/questions/33174638/how-to-check-if-trigger-exists-in-postgresql) – pegla

Répondre

0
échantillon

:

et=# create or replace function event_trigger_begin() returns event_trigger as $$ begin raise info '%',99; end;$$ language plpgsql; 
CREATE FUNCTION 
Time: 27.611 ms 
et=# CREATE EVENT TRIGGER tr_event_begin 
ON ddl_command_start 
EXECUTE PROCEDURE event_trigger_begin (); 
CREATE EVENT TRIGGER 
Time: 18.293 ms 
et=# create table i (i int); 
INFO: 99 
CREATE TABLE 

Vous pouvez utiliser pg_catalog relation pour générer DDL pour event_triggers, SMTH comme:

et=# SELECT format('CREATE EVENT TRIGGER %I ON %s EXECUTE PROCEDURE %I()',evtname,evtevent,evtfoid::regproc) as ddl 
FROM pg_event_trigger; 
               ddl 
-------------------------------------------------------------------------------------------------- 
CREATE EVENT TRIGGER tr_event_begin ON ddl_command_start EXECUTE PROCEDURE event_trigger_begin() 
(1 row) 

et enfin la bonne façon de se définir:

MacBook-Air:~ vao$ pg_dump -d et -s | tail -20 

CREATE FUNCTION event_trigger_begin() RETURNS event_trigger 
    LANGUAGE plpgsql 
    AS $$ begin raise info '%',99; end;$$; 


ALTER FUNCTION public.event_trigger_begin() OWNER TO vao; 

-- 
-- Name: tr_event_begin; Type: EVENT TRIGGER; Schema: -; Owner: vao 
-- 

CREATE EVENT TRIGGER tr_event_begin ON ddl_command_start 
    EXECUTE PROCEDURE public.event_trigger_begin(); 

bien sur dbname ne sera pas et et tail ne fonctionnera pas - je l'ai utilisé jsut to truncat e sortie

+0

S'il vous plaît, dites-moi comment une requête ne ressemblera à sql. –

+0

Excellent - merci beaucoup. Et bonne journée! –

+0

@ Виктор pas de soucis, s'il vous plaît approuver et/ou upvote en cas de réponse –