Столкнулся с проблемой резервирования и восстановления бэкпапа на PostgreSQL (оказалось все не так просто как MSSQL). На просторах нашей не объятой сети, найти что то дельное и работающее из коробки очень проблемно, поэтому все пришлось собирать по кусочкам из разных источников, методом проб и ошибок чтобы получить действительно рабочую схему. Также решение проблем, с которыми можно столкнуться.
Подробнее о командах резервирование и восстановление, а также их параметрах, можно прочесть в документации офф. сайте postgrespro.ru
pg_dump — выгрузить базу данных Postgres: https://postgrespro.ru/docs/postgrespro/11/app-pgdump
pg_restore — восстановить базу данных Postgres: https://postgrespro.ru/docs/postgrespro/11/app-pgrestore.html
1. Резервирование базы 1с 8.3 на базе PostgreSQL.
Пример Bat-файла с командами для резервирования (выделенные строки надо убрать)
REM /////////////////////////////////////////////////////////////////////////////////
REM РЕЗЕРВИРВОВАНИЕ ПЕРВОЙ БАЗЫ sibek
REM ПРИМЕР СОЗДАНИЯ РЕЗЕРВНОЙ КОПИИ БАЗЫ ДАННЫХ 1C НА POSTGRESQL
CLS
ECHO OFF
CHCP 866 - установить кодовую страницу 1251 Windows, 866 DOS
REM УКАЗАНИЕ ПЕРЕМЕННЫХ СРЕДЫ POSTGRESQL
SET PGBIN=C:\Program Files\PostgreSQL\11.5-7.1C\bin\
SET PGDATABASE=bdpostgre - Имя базы на Postgre сервере
SET PGHOST=localhost
SET PGPORT=5432
SET PGUSER=postgres - Имя пользователя Postgre сервера
SET PGPASSWORD=password - Пароль пользователя Postgre сервера
REM ПЕРЕХОД В КАТАЛОГ С bat-ФАЙЛОМ (ОТКУДА ЗАПУЩЕН ФАЙЛ)
%~d0
CD %~dp0
REM ФОРМИРОВАНИЕ ИМЕНИ ФАЙЛА ДЛЯ РЕЗЕРВНОЙ КОПИИ И LOG ФАЙЛА ОТЧЕТА
SET DAT=%date:~0,2%%date:~3,2%%date:~6,4% - Получаем текущую дату для имени файла
SET DUMPFILE=D:\1C BackUp\%DAT%-sibek.pgsql.backup - Бэкап файл базы
SET LOGFILE=D:\1C BackUp\%DAT%-sibek.pgsql.log - лог файл процесса
SET DUMPPATH="%DUMPFILE%"
SET LOGPATH="%LOGFILE%"
REM ВЫПОЛНЕНИЕ КОМАНДЫ (ПРОГРАММЫ) ДЛЯ СОЗДАНИЕ РЕЗЕРВНОЙ КОПИИ БАЗЫ
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_sibek.log."
ECHO %DATETIME% Ошибки при создании резервной копии базы данных %DUMPFILE%. Смотрите отчет %LOGFILE%. >> backup_sibek.log
GOTO End
REM ЕСЛИ КОПИЯ СДЕЛАНА БЕЗ ОШИБОК ДЕЛАЕТСЯ ЗАПИСЬ В ЖУРНАЛЕ РЕГИСТРАЦИИ
:Successfull
ECHO %DATETIME% Успешное создание резервной копии %DUMPFILE% >> backup_sibek.log
GOTO End
:End
REM УСТАНАВЛИВАЕТСЯ ПАРАМЕТРЫ ДЛЯ КОПИИ ХРАНИТЬ 5 ДНЕЙ ОТ ДАТЫ СОЗДАНИЯ, УДАЛЯТЬ ПО ИСТЕЧЕНИЮ
FORFILES /p "D:\1C BackUp\" /s /m *.* /d -5 /c "CMD /c del /Q @FILE"
ВАЖНО! Убрать все пробелы после параметров (чтобы сразу был перенос строки) иначе работать не будет т.к. пробелы будут считаться как символы.
Если несколько БД то можно сделать для каждой БД отдельный bat-файл, либо скопировать полностью код и вставить в один bat-файл (2-3 раза) в зависимости от количества баз, изменяя только имя базы и имена файлов бэкапа и логов.
2. Автоматическое резервирование по расписанию
Автоматическое резервирование будем настраивать через планировщик задач: Пуск -> Панель управления -> Администрирование» и запускаем Планировщик заданий, в планировщике выбираем пункт Создать задачу.
Заходим в раздел Триггеры там настраиваем расписание выполнения задания
В разделе Действия указываем какое действие выполнять (в нашем случае указываем наш bat-файл), где прописаны все необходимые команды
После выполнения команды в указанной папке будет создан бэкап и лог файлы процесса выполнения.
На этом этап резервирование закончен, переходим в этапу восстановления БД из резервной копии.
3. Восстановление копии БД 1С 8 на PostgreSQL
На этом этапе были небольшие трудности. т.к. не где не было указано конкретно, что надо делать именно так и по другому это не заработает (пришлось догадываться).
Первая проблема. При попытка восстановить БД может возникнуть ошибка:
Не какие регистрации данной DLL (regsvr32), обновление и прочее не помогу, надо данную DLL скопировать в System32 и все заработает как часы.
DLL находится: C:\Program Files\PostgreSQL\11.5-7.1C\pgAdmin 4\bin\python36.dll
DLL скопировать: C:\Windows\System32\python36.dll
Вторая проблема. При восстановление БД в PostgreSQL, она должна быть создана только на Postgre сервер, а в консоле 1С Севера ее быть не должно иначе будет куча ошибок проблем и результат отрицательный (в сравнении с MSSQL таких проблем нет). Так и не разобрался почему, но если настроена связь базы данные на 1с сервере и PostgreSQL сервере то база валится в ошибки (Сервер 1с и PostgreSQL находятся на одном ПК, возможно причина в этом).
Поэтому перед восстановлением создаем базу данных в PostgreSQL, правой кнопкой создать, указываем имя БД, параметры все стандартные по умолчанию.
После чего наживаем правой кнопкой на созданную БД выбираем пункт "Восстановить"
И указываем параметры:
Процесс восстановление займет какое то время.
После чего БД можно создавать на 1С Сервере и подключать к Postgre:
После этого в базу можно заходить и работать, все работает корректно проблем в работе не было.
Во вложении Bat-файл для копирования 2 баз.
Как развернуть базу данных 1С на PostgreSQL можно почитать тут: //infostart.ru/public/1180438/
Готовое решение
Database Compression Tool (DCT): Универсальный инструмент сжатия, свертки и конвертации баз данных 1С
Универсальный инструмент сжатия, свертки и конвертации баз данных 1С.
Свертка баз данных еще никогда не была такой простой и быстрой!
DCT ускоряет работу базы, освобождая гигабайты пространства и повышая производительность системы. Доступна ДЕМО версия!