场景:有人在 PostgreSQL 数据库中创建了一个名为“foo”的函数。接下来,有人修改了函数“foo”的内部工作原理。
问题:PostgreSQL 是否提供了一种方法来知道谁修改了函数“foo”以及何时修改了“foo”?
当然,您可以使用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 TRIGGER
on 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
如果您愿意,您也应该可以轻松地将其制作成表格。
归档时间: |
|
查看次数: |
739 次 |
最近记录: |