pgsql:监控数据库操作的实时记录与触发器实现

0 下载量 119 浏览量 更新于2024-08-03 收藏 8KB TXT 举报
本文档主要介绍了如何在PostgreSQL数据库中实现对表的增删改查操作进行实时监控和记录。首先,作者创建了一个名为`demo_table_history`的历史记录表,用于存储每次操作的相关信息。这个表包含以下字段: 1. `id`: 一个序列类型(SERIAL)的主键,自动递增。 2. `action`: 字符串类型,记录操作类型,如INSERT、UPDATE或DELETE。 3. `table_name`: 字符串类型,记录操作涉及的表名。 4. `timestamp`: TIMESTAMP WITH TIME ZONE类型,使用`CURRENT_TIMESTAMP`功能自动记录操作时间,带有时区信息。 5. `data`: JSONB类型,用来存储变更前后的数据,以JSON格式保存。 接着,作者定义了一个名为`demo_table_trigger_function`的触发器,该触发器会在特定操作(INSERT、UPDATE或DELETE)发生时被调用。触发器的逻辑根据`TG_OP`变量判断操作类型,并执行相应的操作: - 对于INSERT操作,将新的行数据转换为JSON格式(`row_to_json(NEW)::jsonb`),然后插入到历史记录表中,同时记录`action`为'INSERT'。 - 对于UPDATE操作,同样将更新后的行数据转换为JSON并插入历史记录表,`action`设置为'UPDATE'。 - 对于DELETE操作,将被删除的数据(使用旧数据`OLD`)转换为JSON,`action`设为'删除',并插入历史记录表。 这个触发器的`RETURN`语句在每个操作后返回新行或旧行,确保了触发器操作的完整性。通过这种方式,数据库管理员可以方便地追踪和审计数据库的修改历史,对于数据库管理和日志分析具有重要作用。在实际应用中,可以根据需求调整表结构和触发器逻辑,以适应不同的业务场景。