PostgreSQL 知识量:10 - 51 - 182
在PostgreSQL中,事件触发器支持的事件分三类:ddl_command_start、ddl_command_end和sql_drop。
ddl_command_start:在DDL(数据定义语言)开始前触发。
ddl_command_end:在DDL结束后触发。
sql_drop:删除一个数据库对象前被触发,其中删除的数据库对象详细信息,可以通过pg_event_trigger_dropped_objects()函数记录下来。
以下是一个示例,演示如何创建一个事件触发器,用于记录对特定表的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操作关联起来。
Copyright © 2017-Now pnotes.cn. All Rights Reserved.
编程学习笔记 保留所有权利
MARK:3.0.0.20240214.P35
From 2017.2.6