PostgreSQL 18 中文参考文档(未翻译部分保留英文)🌐 切换到英文原版 →

38.3. 事件触发器基础示例 #

以下完整示例演示如何使用 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();