Программы
Ленивый backup PostgreSQL

Ленивый backup PostgreSQL

Простой как кирпич рецепт создания бекапа всего PostgreSQL сервера, а также восстановление PostgreSQL сервера из этого бекапа.

Как-то давно я написал заметку о ленивом бекапе MySQL серевера и на днях случайно на неё наткнулся. Там в легенде я сетую на свою лень, что ещё не перевёл старые проекты на PostgreSQL. С тех пор у меня не осталось проектов с MySQL (не на что не намекаю, просто так сложилось). Наверное, стоит уже и для PostgreSQL написать рецептик для ленивых как и я людей.

Стягиваем текущее состояние PostgreSQL с удалённого сервера

Всё сделано максимально тупо, с прицелом на то, чтобы закинуть команду в crontab, и оно само бы там бекапилось:

ssh root@{{ host }} -C 'su -c pg_dumpall postgres' > host-$(date +%Y-%m-%d_%H:%M:%S).sql

О чём тут стоит уточнить: дамплю на удалённом сервере из под стандартного пользователя postgres, а значит надо из под него запустить команду - тут нам помогает su. Чтобы не париться с настройками sudo, запускаю её из под root-а.

pg_dumpall нам выводит всё состояние на стандартный поток вывода, который мы по ssh сливаем в локальный файлик. Для удобства файлику сделал постфикс с текущей датой+временем.

Восстанавливаем базы данных и учётки из файла дампа PostgreSQL

Как и в случае MySQL / MariaDB, бекап PostgreSQL представляет из себя обычный текстовый файл с SQL командами. Поэтому без зазрений совести отправляем его на вход команде psql, чтобы все команды выполнились и сделали то же состояние сервера, что и в момент дампа.

cat file.sql | sudo su -c psql postgres

В целом, это всё. Делайте бекапы, хотя бы ленивые!