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