PostgreSQL: ведение журнала операций - PullRequest
0 голосов
/ 01 мая 2018

Мне необходимо убедиться, что все изменения данных (вставка / обновление / удаление) записаны в моей базе данных. Чтобы получить более крупную картину, процедура будет считывать каждую модификацию и отображать эту информацию в определенной структуре сообщения, а затем добавлять ее в очередь, подобную Kafka. Я не уверен, что лучший способ сделать это все же. Этот ответ намекает на использование плагина test_decoding. Другие ресурсы указывают на WAL и запрашивают слоты репликации, но у меня нет необходимости ни архивировать WAL, ни фактически копировать мои данные. Мне просто нужен журнал всего, что случилось с этими данными. Что-то вроде:

SELECT * FROM operations_log;

> | query                                                              |
> | INSERT INTO users (id, name, bio) VALUES (1, 'pat', 'a person')    |
> | UPDATE users SET name = 'Pat' WHERE id = 1                         |     

Как люди справляются с этой задачей в PostgreSQL? Для получения этого преимущества необходимо тиражирование или архивирование WAL?

1 Ответ

0 голосов
/ 01 мая 2018

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

Итак, для примера, я бы создал таблицу users_audit. таблица:

create table users_audit (
    ts timestamptz default current_timestamp,
    like users
);

А потом триггерная функция

create function users_audit_trigger() returns trigger
language plpgsql as $$
insert into users_audit values (current_timestamp, OLD.*);
$$

Наконец фактический триггер ...

create trigger users_audit_tg after update or delete on users
for each row execute procedure users_audit_trigger();

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...