5

テーブルが作成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();
4

1 に答える 1

3

追加情報を取得できるようにするには、on ddl_command_endの代わりにトリガーを使用しon ddl_command_startます。このようなトリガーを呼び出す関数では、次を使用できますpg_event_trigger_ddl_commands function

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;

コードの変更に注意してください。

1) 使用する必要はありませんEXECUTE
2)は、スキーマ内のテーブルではなく、現在のスキーマ内の"public.Layers"正確な名前を持つテーブルを意味します。"public.Layers"Layerspublic

于 2016-10-08T21:10:28.900 に答える