PostgreSQL drop 函数执行给定的函数并且不删除触发函数

PostgreSQL drop function executes given function and doesn't remove trigger function

我用下面的代码创建了触发器函数:

CREATE OR REPLACE FUNCTION snitch() RETURNS event_trigger AS $$
BEGIN
    select pgr_createTopology('public.roads_noded', 0.001);
END;
$$ LANGUAGE plpgsql;

CREATE EVENT TRIGGER snitch ON ddl_command_start EXECUTE FUNCTION snitch();

它位于 public 架构中。现在我想删除这个函数,但是当我尝试删除它时,它会执行给定的函数并且服务器挂起。重启服务器后,同样的事情发生了。我无法创建或删除任何 table。有没有办法去掉这个触发函数?

DROP FUNCTION 命令本身是一个 DDL 命令,因此触发器将会触发。您应该首先使用 DROP EVENT TRIGGER 删除触发器,然后使用函数。