История аудита PostgreSQL с использованием триггера - PullRequest
1 голос
/ 03 июля 2019

У меня есть требование вести таблицу истории, которая будет отслеживать все изменения, которые происходят во всех таблицах в моей базе данных.

Ниже приведен утвержденный 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 таблиц (которые, вероятно, будут увеличены в будущем). Переход к подходу - использование триггеров. Что действительно беспокоит меня. Потому что, если мое понимание правильное, мне нужно создать функцию для каждого столбца, а затем связать ее с триггером. Это означает, что если у меня будет 10 столбцов в 78 таблицах, то в общей сложности будет 780 функций (каждая из которых представляет отдельные столбцы каждой таблицы) и такое же количество триггеров, которые вызывают эти функции.

Я действительно надеюсь, что есть лучшее решение для этого. Отслеживание этого в коде на данный момент вообще невозможно.

Любая помощь по этому вопросу будет принята с благодарностью.

1 Ответ

0 голосов
/ 03 июля 2019

Вам нужен один триггер на таблицу , а не на столбец.

Вы можете написать функцию триггера для каждой таблицы или написать универсальную, которая работает для всех.

...