以下完整示例演示如何使用 PL/pgSQL 编写一个事件触发器,在执行任何 DDL 命令后自动将其记录到审计日志表中:
CREATE TABLE ddl_audit_log (
event text,
tag text,
object_type text,
object_identity text,
logged_at timestamp with time zone DEFAULT current_timestamp
);
CREATE OR REPLACE FUNCTION log_ddl_execution()
RETURNS event_trigger AS $$
DECLARE
r RECORD;
BEGIN
FOR r IN SELECT * FROM pg_event_trigger_ddl_commands() LOOP
INSERT INTO ddl_audit_log (event, tag, object_type, object_identity)
VALUES (TG_EVENT, TG_TAG, r.object_type, r.object_identity);
END LOOP;
END;
$$ LANGUAGE plpgsql;
CREATE EVENT TRIGGER audit_ddl_trigger
ON ddl_command_end
EXECUTE FUNCTION log_ddl_execution();