如何使用键和列名以及列的更新值将 table 数据中的更改记录到另一个 table

How to record changes in table data to another table with Key and Column Name and Update value for column

我 table 调用了 EMP,其中我将 EMPID、EMPNAME、EMPDESIG 作为列,将 EMPID 作为主键。现在,如果有人来找这个员工 table 并更新任何行。我想将更新查询条目写入另一个 table

EMPID  EMPNAME    EMPDESIG
10      NJ          DBA
25      JN         Manager

它有这样的架构,其中 ID(ROW)、ColumnName、ColumnValue、TimeStamp 和 ID 在这个 table 中将是 EMPID,因此我们可以进行一对一映射。

我已经尝试过用于审计的 Postgres 触发器,它工作正常,但我不想进行全面审计,我只想要执行此操作的一小部分审计 activity.I 可以将新列添加到我的 EMP Table

ID ColumnName CloumnValue
10  EMPNAME     Nick
25  EMPDESIG    Dev

您可以使用 IS DISTINCT FROM 检查列是否被修改并将其插入到日志记录中 table。

CREATE OR REPLACE FUNCTION pr_log_modifed() 
RETURNS TRIGGER 
AS $BODY$
 BEGIN
    IF OLD.empname IS  DISTINCT FROM NEW.empname THEN
     INSERT INTO EMP_UPDATE_LOG(id,ColumnName,ColumnValue,ts) 
           VALUES(NEW.empid,'EMPNAME',NEW.empname,clock_timestamp() );
    END IF;

    IF OLD.empdesig IS  DISTINCT FROM NEW.empdesig THEN
     INSERT INTO EMP_UPDATE_LOG(id,ColumnName,ColumnValue,ts) 
           VALUES(NEW.empid,'EMPDESIG',NEW.empdesig,clock_timestamp( ));
    END IF;    
    RETURN NULL;
 END
 $BODY$ language plpgsql;

Demo