2017-10-14 14 views
2

が、私は、このようなトリガを作成するイベントトリガのために、例えばトリガーのステートメントを作成するどのテーブル店舗知っていただきたいと思いますか?または少なくとも部分的に。 information_schema.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 

あなたが好きななめらか、event_triggersのDDLを生成するpg_catalog関係を使用することができます。

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ではなく、tailは動作しません - 私はtruncatにjsutを使いましたe出力

+0

リクエストはSQL上でどのように見えるのか教えてください。 –

+0

優秀 - 多くのありがとう。そして、良い一日を! –

+0

@Викторご安心ください。回答があれば承認してください。 –