如何使用键和列名以及列的更新值将 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;
我 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;