我需要维护一个历史记录表,该表将跟踪数据库中所有表中发生的所有修改。
以下是批准的sql,它是一个通用表,将接受表名,列名,值,所涉及的操作(插入/更新/删除)等。
CREATE TABLE "User_History" (
"id" serial,
"table_name" text NOT NULL,
"column_name" text NOT NULL,
"pk_id" text,
"old_value" text,
"new_value" text,
"action" text,
"modified_at" timestamp NOT NULL DEFAULT NOW(),
"modified_by" UUID NOT NULL,
PRIMARY KEY ("id")
);
该数据库中的所有CRUD操作都必须插入此表中。
我总共有78张桌子(将来可能会增加)。 可行的方法是使用触发器。 这真的让我担心。因为,如果我的理解是正确的,我将不得不为每个列创建一个函数,然后将其绑定到触发器。这意味着,如果我在78个表中各有10列,那么它将总共有780个函数(每个函数代表每个表的各个列)和相等数量的触发器调用这些函数。
我确实希望对此有更好的解决方案。目前根本无法在代码中进行跟踪。
在此问题上的任何帮助将不胜感激。
答案 0 :(得分:0)
您需要一个触发器每个表,而不是每个列。
您可以为每个表编写一个触发器函数,或者编写一个适用于所有表的通用函数。