PostgreSQL, как найти какие-либо изменения в последних n-минутах

Я пишу программу, которая синхронизирует базы данных PostgreSQL и MS SQL (и добавляет некоторые изменения в этот переход). С многомиллионными записями требуется много времени, и сервер довольно плохо работает с select *; он также требует больше ресурсов для анализа неизмененных записей и проверки их на сервере MS SQL.

Есть ли в PostgreSQL журналы, которые я могу проанализировать, чтобы узнать изменения, произошедшие за последние n-минуты? Это позволило бы мне выбрать только те записи, которые мне нужны для работы; улучшение производительности.

Ответ 1

Postgresql, найдите изменения за последние n минут:

Postgresql не сохраняет время, когда строки были добавлены/обновлены/удалены (это действительно замедлит работу для postgresql для обработки временных меток, подобных этому, если вы этого не хотите).

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

Получить строки, где метка времени больше даты:

SELECT * from yourtable 
WHERE your_timestamp_field > to_date('05 Dec 2000', 'DD Mon YYYY');

Получить строки, которые были изменены за последние n минут:

SELECT * from yourtable 
WHERE your_timestamp_field > current_timestamp - interval '5 minutes'

Ответ 2

Вы можете использовать описанный здесь триггерный подход:

http://wiki.postgresql.org/wiki/Audit_trigger

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