postgresql:如何知道函数何时被修改

mg1*_*075 4 postgresql

场景:有人在 PostgreSQL 数据库中创建了一个名为“foo”的函数。接下来,有人修改了函数“foo”的内部工作原理。

问题:PostgreSQL 是否提供了一种方法来知道谁修改了函数“foo”以及何时修改了“foo”?

Eva*_*oll 7

当然,您可以使用EVENT TRIGGERS并且可以在此处列出的任何这些 DDL 事件上创建它们

CREATE OR REPLACE FUNCTION abort_any_command()
  RETURNS event_trigger
 LANGUAGE plpgsql
  AS $$
BEGIN
  RAISE EXCEPTION '[%] user % attempt command % which disabled',
    current_timestamp,
    current_user,
    tg_tag;
END;
$$;

CREATE EVENT TRIGGER abort_ddl ON ddl_command_start
  WHEN TAG IN ('DROP FUNCTION', 'CREATE FUNCTION')
  EXECUTE PROCEDURE abort_any_command();
Run Code Online (Sandbox Code Playgroud)

如果您希望事件仅在操作成功完成后触发,您可以创建EVENT TRIGGERon ddl_command_end。创建 之后EVENT TRIGGER,您可以尝试删除该函数,您会看到。

DROP FUNCTION abort_any_command();
ERROR:  [2017-01-09 20:27:33.843529-06] user ecarroll attempt command DROP FUNCTION which disabled
Run Code Online (Sandbox Code Playgroud)

如果您只想在日志中使用它,而不是引发异常,请使用RAISE EXCEPTION. INSERT如果您愿意,您也应该可以轻松地将其制作成表格。