Архивирование всех баз PostgreSQL на Windows

Задумал я архивировать базы PostgreSQL…

Желание похвальное. Тем более, что может статься, что когда-нибудь кто-нибудь “грохнет” свою базу, а тут я, как чёрт из табакерки, с архивной копией… Рыцарь в белых доспехах, да и только!!!

🙂

Надо сказать, что PostgreSQL у меня работает на Windows Server, обслуживает базы 1С…

Появились у меня мысли:

  • мне лень;
  • мне лень менять скрипт архивирования баз PostgreSQL в случае добавления/удаления баз;

🙂

Получился вполне себе скромный скрипт, который делает всё, что мне нужно.

Вот его текст:

@echo off

rem Скрипт архивирования всех баз PostgreSQL

rem Путь к исполняемым файлам PostgreSQL
set PGBINPATH=C:\Program Files\PostgreSQL\9.6.7-1.1C\bin

rem Путь к папке с архивами
set BACKUPPATH=F:\Program Files\Postgres

rem Переходим в папку с исполняемыми файлами PostgreSQL
c:
cd “%PGBINPATH%”

rem Получаем список всех баз PostgreSQL

psql -A -q -t -U postgres -c “select datname from pg_database” > C:\Windows\Temp\pgbases.txt

rem для каждой БД создадим собственную поддиректорию в BACKUPPATH

for /F %%B in ( C:\Windows\Temp\pgbases.txt ) do ( mkdir “%BACKUPPATH%\%%B” )

rem делаем архивную копию каждой базы

for /F %%B in ( C:\Windows\Temp\pgbases.txt ) do ( pg_dump -U postgres %%B > “%BACKUPPATH%\%%B\%%B-%date%-%time:~0,2%.%time:~3,2%.%time:~6,2%.dump” )

В папке с архивами для каждой базы создаётся своя директория, в которую-то и сохраняются архивные копии.

PS.

Слишком старые архивные копии удаляются отдельным скриптом. 🙂

PPS.

В Linux я создал файл ~/postgresbackup.sh со следующим содержимым

#!/bin/bash

PATH=”/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin”

myfile=”/root/pgbases.txt”
backupdir=”/mnt/raid5/backup/postgres”
mydate=`date`

# Получаем список всех баз PostgreSQL
psql -A -q -t -U postgres -c “select datname from pg_database” > $myfile

for var in $(cat $myfile)
do
echo “BackUp DB $var”

# для каждой БД создадим собственную поддиректорию
mkdir -p “$backupdir/$var”

# делаем архивную копию каждой базы
pg_dump -U postgres $var > “$backupdir/$var/$mydate.dump”

done