PostgreSQL

PostgreSQL 知识量:10 - 51 - 182

8.2 事件触发器><

事件触发器支持的事件- 8.2.1 -

在PostgreSQL中,事件触发器支持的事件分三类:ddl_command_start、ddl_command_end和sql_drop。

  • ddl_command_start:在DDL(数据定义语言)开始前触发。

  • ddl_command_end:在DDL结束后触发。

  • sql_drop:删除一个数据库对象前被触发,其中删除的数据库对象详细信息,可以通过pg_event_trigger_dropped_objects()函数记录下来。

事件触发器实例- 8.2.2 -

以下是一个示例,演示如何创建一个事件触发器,用于记录对特定表的INSERT和UPDATE操作:

CREATE TABLE audit_log (  
    operation_type VARCHAR(10),  
    timestamp TIMESTAMP,  
    schema_name VARCHAR(100),  
    table_name VARCHAR(100),  
    old_data TEXT,  
    new_data TEXT  
);  
  
CREATE OR REPLACE FUNCTION audit_trigger()  
RETURNS TRIGGER AS 
$$
  
BEGIN  
    IF TG_OP = 'INSERT' THEN  
        INSERT INTO audit_log (operation_type, timestamp, schema_name, table_name, old_data, 
        new_data)  
        VALUES ('INSERT', current_timestamp, TG_TABLE_SCHEMA, TG_TABLE_NAME, NULL, hstore(NEW));  
        RETURN NEW;  
    ELSIF TG_OP = 'UPDATE' THEN  
        INSERT INTO audit_log (operation_type, timestamp, schema_name, table_name, old_data, 
        new_data)  
        VALUES ('UPDATE', current_timestamp, TG_TABLE_SCHEMA, TG_TABLE_NAME, hstore(OLD), 
        hstore(NEW));  
        RETURN NEW;  
    END IF;  
    RETURN NULL; -- result is ignored since this is an AFTER trigger  
END;  

$$
 LANGUAGE plpgsql;  
  
CREATE TRIGGER audit_trigger  
AFTER INSERT OR UPDATE ON your_table_name  
FOR EACH ROW EXECUTE FUNCTION audit_trigger();

在上述示例中,audit_log表用于存储审计日志。audit_trigger函数是一个触发器函数,它将在INSERT或UPDATE操作后被调用。该函数将记录操作类型、时间戳、模式名称、表名称以及旧数据和新数据,并将其插入到audit_log表中。然后,audit_trigger触发器将该函数与your_table_name表的INSERT或UPDATE操作关联起来。