Бэкап PostgreSQL по расписанию в restic

Sard сохраняет базу PostgreSQL логическим дампом pg_dump (формат custom) потоком прямо в репозиторий restic. Дамп не ложится на диск хоста, а данные не проходят через сервер Sard.

Что сохраняется

Что нужно на хосте

Плагин не содержит драйвера PostgreSQL: подключение, версию и права он проверяет программой psql, а дамп делает pg_dump. Обе программы берутся с хоста агента из пакета postgresql-client.

Версия pg_dump не должна быть старше сервера, минимальная версия сервера — PostgreSQL 14. Агент входит под обычной ролью, не под суперпользователем:

CREATE ROLE backup LOGIN PASSWORD '...';
GRANT pg_read_all_data TO backup;

Пароль не попадает на сервер

Пароль не пишется в конфиг источника. Конфиг называет только имя секрета, а значение лежит файлом с правами 0600 на хосте агента. Агент отдаёт пароль только тем хосту и базе, которые разрешил оператор хоста, что бы ни прислал сервер.

printf '%s' 'пароль роли backup' | sudo sard-agent secret set pg-app \
  --plugin postgresql --target db1.example.com:5432/app --stdin

Восстановление

Консоль восстанавливает базу в новое место. Поверх существующей базы восстановление пока делается вручную по документации.

Проверка восстановления

Верификатор на отдельной машине запускает официальный контейнер postgres той же мажорной версии, что у источника, без сети и с лимитами, делает pg_restore и сравнивает отпечаток копии с отпечатком источника. Нужен Docker или Podman.

Чего пока нет