Как-то давно я написал заметку о ленивом бекапе 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
В целом, это всё. Делайте бекапы, хотя бы ленивые!