需要帮助来创建记录所有表的通用触发器。
我有一个名为“system”的表,需要记录它。
创建日志表名称system_audit,其中包含“system”表的所有列以及另外三列名称 modified_dt,modified_by和modified_type。
modified_dt将是current_timestamp modified_by将是用户 和modified_type指定是插入,更新还是删除。(需要捕获插入/更新的新数据和旧的删除数据)
如何编写函数来捕获上述数据。它也需要是动态的,所以我可以在我的架构中的所有表中使用它
注意:所有审计表都包含modified_dt,modified_by和modified_type为必填项。
我从网上获得了一些代码,但它无法正常工作,我之前正在使用oracle,并且刚接触到postgres,不确定如何正确编码。请帮助
答案 0 :(得分:1)
我设法创建了一个通用函数,并且它工作正常。感谢您的帮助。
create or replace function audit.fn__audit()
returns trigger as
$func$
declare
col_name text:='';
audit_table_name text := TG_TABLE_NAME || '_audit';
begin
if TG_OP = 'UPDATE' or TG_OP = 'INSERT' THEN
EXECUTE format('INSERT INTO audit.%1$I SELECT ($1).*,current_timestamp,user,'''||TG_OP||'''',audit_table_name) using NEW;
else
EXECUTE format('INSERT INTO audit.%1$I SELECT ($1).*,current_timestamp,user,'''||TG_OP||'''',audit_table_name) using old;
end if;
return new;
END $func$
LANGUAGE plpgsql VOLATILE;