2016-10-08 5 views
4

テーブルが作成されるたびに実行されるevent triggerを作成しようとしています。 このとき、作成されたテーブルの名前をテーブル(2列のidtablename)に挿入したいと思います。ドキュメントを読む私はテーブル名を取得する方法を見つけることができません。作成したテーブル名を取得

CREATE OR REPLACE FUNCTION insert_layer() 
RETURNS event_trigger 
AS $$ 
    DECLARE r RECORD; 
    BEGIN 
      RAISE NOTICE 'event for % ', tg_tag; 
      -- I would like to execute this 
      --EXECUTE format('INSERT INTO "public.Layers"(name) VALUES(' || tableNameHere || ')') INTO result; 
    END; 
$$ 
LANGUAGE plpgsql; 

CREATE EVENT TRIGGER insert_layer_event ON ddl_command_start 
WHEN TAG IN ('CREATE TABLE') 
EXECUTE PROCEDURE insert_layer(); 
+2

'ddl_command_end'のトリガでは、' 'pg_event_trigger_ddl_commands'関数(https://www.postgresql.org/docs/current/static/functions-event-triggers.html)を使用することができます:' 'RAISE INFO 'テーブル:% '、(pg_event_trigger_ddl_commands())。object_identity; ' – Abelisto

+0

ありがとうございます!あなたが答えを書くなら、私は受け入れます! =) –

答えて

2

、いくつかの追加情報を取得するのではなく、on ddl_command_starton ddl_command_endトリガを使用できるようにするには:

は、これまでのところ私は、これは持っています。コードの変更に

CREATE OR REPLACE FUNCTION insert_layer() 
RETURNS event_trigger 
AS $$ 
    DECLARE r RECORD; 
    BEGIN 
      RAISE NOTICE 'event for % ', tg_tag; 
      -- I would like to execute this 
      r := pg_event_trigger_ddl_commands(); 
      INSERT INTO public."Layers"(name) VALUES(r.object_identity); 
    END; 
$$ 
LANGUAGE plpgsql; 

ご注意:このようトリガーを呼び出す機能では、pg_event_trigger_ddl_commands functionを使用することができます

1)あなたはEXECUTE
2)"public.Layers"は、名前のテーブルを正確に意味使用する必要はありません"public.Layers"であり、スキーマpublicのテーブルLayersではありません。

+0

ヒントありがとうございます。 –

関連する問題