使用触发器的PostgreSQL审核历史记录

时间:2019-07-03 15:25:09

标签: sql postgresql triggers sql-update

我需要维护一个历史记录表,该表将跟踪数据库中所有表中发生的所有修改。

以下是批准的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个函数(每个函数代表每个表的各个列)和相等数量的触发器调用这些函数。

我确实希望对此有更好的解决方案。目前根本无法在代码中进行跟踪。

在此问题上的任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

您需要一个触发器每个表,而不是每个列。

您可以为每个表编写一个触发器函数,或者编写一个适用于所有表的通用函数。