2017-10-14 106 views
2

例如,我創建一個這樣的觸發創建觸發器的語句:我想知道哪些表存儲事件觸發如

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

從該表可以現在以相同的形式拉?或者至少在部分。信息_chema.triggers不包含它,因爲它是一個事件觸發器,而不是一個普通的觸發器。

+0

請參閱[如何檢查PostgreSQL中是否存在觸發器?](https://stackoverflow.com/a/33174794/1995738) – klin

+0

這將使用正常的觸發器,但我需要事件觸發器。 –

+0

[如何檢查PostgreSQL中是否存在觸發器?](https://stackoverflow.com/questions/33174638/how-to-check-if-trigger-exists-in-postgresql) – pegla

回答

0

樣本:

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 

您可以使用pg_catalog關係生成的DDL event_triggers,水木清華這樣的:

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) 

,最後以正確的方式來獲得的定義:

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(); 

當然dbname不會是et,尾巴也不行 - 我用它來截斷e輸出

+0

請告訴我一個請求將只看sql。 –

+0

優秀 - 非常感謝。祝你有美好的一天! –

+0

@Виктор不用擔心,如果回答請批准和/或上傳 –

相關問題