获取创建的 table 名称

Get created table name

我正在尝试创建 event trigger,每当创建 table 时执行 。 发生这种情况时,我想插入一个 table (它有 2 列 idtablename ) 创建的 table 的名称。阅读文档我无法找到如何获得 table 名称。

到目前为止我有这个:

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

为了能够检索一些额外的信息,请使用 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" 表示 table 在当前模式中的名称正好是 "public.Layers",而不是模式 public 中的 table Layers