вторник, 19 марта 2019 г.

Резервное копирование базы PostgreSQL pg_dump под windows


Создание пустой базы demo1 с помощью pgAdmin4


Создание базы demo1 запросом sql

 CREATE DATABASE demo1
    WITH
    OWNER = postgres
    TEMPLATE = template0
    ENCODING = 'UTF8'
    LC_COLLATE = 'Russian_Russia.1251'
    LC_CTYPE = 'Russian_Russia.1251'
    TABLESPACE = pg_default
    CONNECTION LIMIT = -1;

psql -U postgres -c "CREATE DATABASE demo1 WITH OWNER = postgres TEMPLATE = template0 ENCODING = 'UTF8' LC_COLLATE = 'Russian_Russia.1251' LC_CTYPE = 'Russian_Russia.1251' TABLESPACE = pg_default CONNECTION LIMIT = -1;"

Восстановление базы demo в предварительно созданную выше базу demo1:

pg_restore.exe --host "localhost" --port "5432" --username "postgres" --dbname "demo1" --verbose "demo2019-03-20_20-03-06.backup"


Восстановление базы demo в туже базу demo с заменой данных
C:\Program Files (x86)\pgAdmin 4\v4\runtime\pg_restore.exe --host "localhost" --port "5432" --username "postgres" --no-password --role "postgres" --dbname "demo" --clean --verbose "E:\\windows\\1\\demo\\DEMO20~1.BAC"

Тоже с использование pgAdmin4



Скрипт для автоматизации резервного копирования pg_dump_demo.bat
(создать для каждой базы добавить в планировщик)

REM СОЗДАНИЕ РЕЗЕРВНОЙ КОПИИ БАЗЫ ДАННЫХ demo POSTGRESQL
REM в папке запуска скрипта в папке %PGDATABASE%
REM для базы отличной от demo  изменить PGDATABASE (следующая строка)
SET PGDATABASE=demo
CLS
ECHO OFF
CHCP 1251
REM Установка переменных окружения
REM SET PGBIN=C:\Program Files\PostgreSQL\11.5-19.1C\bin
SET PGBIN=F:\PostgreSQL\11.5-19.1C\bin
SET PGHOST=localhost
SET PGPORT=5432
SET PGUSER=postgres
SET PGPASSWORD=pass
REM Удаляем в папке PGDATABASE все файл старше DAY
SET DAY=5
REM Смена диска и переход в папку из которой запущен bat-файл
%~d0
CD %~dp0
REM Формирование имени файла резервной копии и файла-отчета
SET DATETIME=%DATE:~6,4%-%DATE:~3,2%-%DATE:~0,2%_%TIME:~0,2%-%TIME:~3,2%-%TIME:~6,2%
SET DUMPFILE=%PGDATABASE%%DATETIME%.backup
SET LOGFILE=%PGDATABASE%%DATETIME%.log
SET DUMPPATH="%PGDATABASE%\%DUMPFILE%"
SET LOGPATH="%PGDATABASE%\%LOGFILE%"
REM Создание резервной копии
IF NOT EXIST %PGDATABASE% MD %PGDATABASE%
REM Удаляем в папке PGDATABASE все файл старше DAY
forfiles /p %PGDATABASE% /m * /s /d -%DAY% /c "cmd /c del @path /q" >nul 2>&1
REM Если батник будет запускаться планировщиком при загрузке
REM для исключения повторных срабатываний в один день
FORFILES /p "%PGDATABASE%" /M *.backup /D 0 >nul 2>&1
if not errorlevel 1 exit
CALL "%PGBIN%\pg_dump.exe" --format=custom --verbose --file=%DUMPPATH% 2>%LOGPATH%
REM Анализ кода завершения
IF NOT %ERRORLEVEL%==0 GOTO Error
GOTO Successfull
REM В случае ошибки удаляется поврежденная резервная копия и делается соответствующая запись в журнале
:Error
DEL %DUMPPATH%
MSG * "Ошибка при создании резервной копии базы данных. Смотрите backup.log."
ECHO %DATETIME% Ошибки при создании резервной копии базы данных %DUMPFILE%. Смотрите отчет %LOGFILE%. >> %PGDATABASE%.log
GOTO End
REM В случае удачного резервного копирования просто делается запись в журнал
:Successfull
ECHO %DATETIME% Успешное создание резервной копии %DUMPFILE% >> %PGDATABASE%.log
GOTO End
:End 

Вообще хорошо перед pg_dump
Остановить сервер 1С
"C:\Program Files\1cv8\8.3.13.1690\bin\ragent.exe" -stop
После pg_dump
"C:\Program Files\1cv8\8.3.13.1690\bin\ragent.exe" -start






Комментариев нет:

Отправить комментарий