Для того, чтобы сделать «элементарный» backup в postgresql нужно выполнить несколько команд. Итак, приступим :)
Залогинимся под пользователем postgres
$ su - postgres
Посмотрим список баз данных
$ psql -l
Воспользуемся pg_dump — стандартной утилитой для создания резервных копий postgresql. Она имеет достаточно простой синтаксис
$ pg_dump databasename > outputfile
Например для базы данных databasename, это будет выглядеть так
Для того, чтобы dump занимал меньше места на диске, его лучше сжать.
$ pg_dump databasename | gzip -c > databasename.dump.out.gz
Для восстановления (restore) достаточно выполнить.
$ psql -d databasename -f databasename.dump.out
Есть еще весьма полезная команда, которая создает dump всех баз данных и помещает их в один файл.
$ pg_dumpall > all.dbs.out
Или же с компрессией на лету.
$ pg_dumpall | gzip -c > all.dbs.out.gz
Можно это оформить в виде простенького скриптика для автоматизации процесса резервного копирования.
#!/bin/bash
#расположение директории с dump'ами
DIR="/backups/postgres"
mkdir -p $DIR
#путь к log файлу
LOG="/var/log/postgres_log.log"
touch $LOG
TIMENAME=`date +%d.%m.%Y-%H.%M`
db=`psql -l | sed -n 4,/\eof/p | grep -v rows\) | grep -vE 'template[0|1]' | awk {'print $1'}`
for n in $db; do
TIMEDUMP=`date '+%T %x'`
echo "backup and vacuum has been done at $TIMEDUMP : $TIMENAME on db: $n" >> $LOG
vacuumdb -z $n >/dev/null 2>&1
pg_dump $n | gzip -c > "$DIR/psql-$n-$TIMENAME-db.dump.gz"
done
Ну и желательно добавить это в cron для выполнения бэкапа postgresql с определенной переодичностью.
/path/backup_script > /dev/null 2>&1
Найдено на просторах интернета.