pg_basebackup делает ровно одну вещь — снимает физическую копию кластера, а всё остальное (расписание, ретеншн, инкременты, сжатие в несколько потоков) приходится дописывать самому в обвязке на bash. pgBackRest с самого начала проектировался как отдельный инструмент именно под эти задачи, а не как обёртка вокруг pg_basebackup.
Типы бэкапа задаются опцией --type: full копирует кластер целиком без зависимостей от прошлых копий, diff — отличия от последнего full, incr — отличия от последнего успешного бэкапа любого типа. По умолчанию pgBackRest сам пытается сделать incr, и только если прежнего full ещё нет — откатывается на full:
# первый бэкап стенда — всегда full, даже без явного --type
pgbackrest --stanza=main --type=full backup
# далее по расписанию — инкремент от последнего успешного бэкапа
pgbackrest --stanza=main --type=incr backup
Параллелизм настраивается через process-max, и его можно выставлять отдельно под каждую команду в конфиге, а не одним значением на всё:
[global]
process-max=2
[global:backup]
process-max=4
[global:restore]
process-max=8
Самое заметное отличие от pg_basebackup -z — сжатие не одним потоком gzip, а параллельно по воркерам, и можно выбрать алгоритм (lz4, zstd) вместо устаревшего gzip — именно сжатие обычно и есть узкое место бэкапа на большой базе, так что выигрыш от параллелизации здесь ощутимее всего. Плюс встроенный WAL-архивинг, шифрование на лету и репозиторий на S3/GCS/Azure без сторонних скриптов поверх — то, что с pg_basebackup пришлось бы собирать из нескольких утилит вручную.
#postgresql #backup
