У меня есть требование вести таблицу истории, которая будет отслеживать все изменения, которые происходят во всех таблицах в моей базе данных.
Ниже приведен утвержденный 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 функций (каждая из которых представляет отдельные столбцы каждой таблицы) и такое же количество триггеров, которые вызывают эти функции.
Я действительно надеюсь, что есть лучшее решение для этого. Отслеживание этого в коде на данный момент вообще невозможно.
Любая помощь по этому вопросу будет принята с благодарностью.