Резервное копирование Postgresql, можно ли настроить?
Здравствуйте. Подскажите, возможно ли настроить резервное копирование в Postgresql раздельно?
Имеется база данных, в ней есть несколько таблиц, которые представляют собой логи\статистику. Необходимо настроить раздельное резервное копирование для основной базы и для этих таблиц. Было бы все просто, если бы данные в таблицах были фиксированы, но некоторые поля в этих таблицах изменяются. Поэтому надо каким-то образом еще учитывать произведенные изменения.
В идеале хотелось настроить схему копирования следующим образом:
В какой-то определенный день делать полную резервную копию базы и статистики, а во все остальные дни\часы делать копию основной базы без статистики + (новые записи и произведенные изменения в таблицах статистики).
Подскажите, реально ли в Postgresql сделать подобное?
UPD. Предположим в понедельник у меня делается полный бэкап все базы и статистики. В таблице статистики, скажем, 20 миллионов записей.
Следующий бэкап происходит через 3 часа. За эти 3 часа в таблицу статистики прилетело 50 тысяч записей и было изменено еще 5 тысяч. Бэкап должен включать в себя саму базу без статистики (это понятно как сделать) и вот только эти 50 тысяч новых записей и информацию об изменении этих 5 тысяч, а саму таблицу полностью не копировать.
Чтобы в случае чего, была возможность восстановить сначала саму базу, потом восстановить полный бэкап статистики, созданный в тот же понедельник, а потом подтянуть только новые записи и внести изменения в таблицы статистики, которые произошли после создания бэкапа в понедельник.
Нет, это не то, что мне нужно. Т.е. отдельно таблицы статистики то это понятно как мне забэкапить, но мне необходимо в следующие бэкапы (которые будут происходить до следующего полного бэкапа) делать копии таблиц статистики без той информации, что была сделана во время полного копирования, плюс еще необходимо произвести те же изменения в таблицах, что происходили между полным бэкапом и "частичным".
Dannerty, то есть разностные копии на уровне прикладной логики? Тогда вам придётся написать программу/скрипт, которая будет при запуске выбирать из базы нужные данные, конвертировать их в удобный формат и сохранять в файл, а потом добавить её в крон. В общем-то тоже не сложное дело, но выходит за рамки вопроса.
Посмотрите в сторону PITR - это по-моему как раз то, что вам нужно, то есть возможность откатывать (точнее, наоборот, докатывать) базу на конкретный момент времени. Делается полный бэкап, а все изменения, происходящие после него, складываются в WAL-файлы.
В общем решил сделать такой вариант:
Создать дополнительные таблицы для сбора изменений в таблицах статистики. На таблицы статистики повесить триггеры на insert\update, которые будут вставлять\изменять записи в дополнительных таблицах. А затем из этих доп. таблиц будут данные переноситься куда нужно через insert on conflict.
Вроде все в теории выглядит работоспособным.