database - 获取创建的表名

标签 database postgresql event-triggers

我正在尝试创建一个事件触发器,每当创建一个 时执行。 发生这种情况时,我想插入一个表(有 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();

最佳答案

为了能够检索一些额外的信息,请使用 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" 完全相同的表,而不是 Layers 中的表架构 public

关于database - 获取创建的表名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39936923/

相关文章:

java - 如何用 XML 或其他简单文件格式表示多对多关系?

java - 提高怪物数据库速度的方法

java - 不支持对 Spring Boot : Mixing of ? 参数和 ?1 等其他形式的 native 查询

ruby-on-rails - PG::UndefinedFile: 错误:无法打开扩展控制文件

sql - Postgresql:更改外键约束的操作

c# - UWP - 按下指针不起作用

postgresql - 是否可以使用 PostgreSQL 的事件触发器针对一组特定的表捕获 DDL 事件?

php - 游戏项目使用ajax更新数据库

php - 在第 26 行获取错误 : Fatal error: Call to undefined function: () in/homepages/44/d1895123746/htdocs/cll/index. php。如何修复?

sql - 事务在触发器中结束 批处理已中止