我需要维护一个历史表,该表将跟踪我数据库中所有表中发生的所有修改。
下面是认可的sql,是一个通用的表,会接受表名,列名,值,涉及的 Action (插入/更新/删除)等。
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张 table (以后很可能会增加)。 go to 方法是使用触发器。 这让我很担心。因为,如果我的理解是正确的,我将不得不为每一列创建一个函数,然后将其绑定(bind)到触发器。这意味着,如果我在 78 个表中各有 10 列,那么它将总共有 780 个函数(每个函数代表每个表的各个列)和调用这些函数的相等数量的触发器。
我真的希望有更好的解决方案。目前根本不可能在代码中跟踪这一点。
我们将不胜感激任何对此问题的帮助。
最佳答案
您每个表需要一个触发器,而不是每个列。
您可以为每个表编写一个触发器函数,或者编写一个适用于所有表的通用触发器函数。
关于sql - 使用触发器的 PostgreSQL 审计历史,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56873432/