Вносить какие-то глобальные изменения сразу в работающую базу данных 1С:Предприятие — дело неблагодарное. Даже если у Вас есть резервные копии, понадобится время, чтобы восстановить их, а время для некоторых организаций критично. Поэтому лучше проводить отладку своих обработок на копии базы данных. Если это файловая версия — вообще нет никаких проблем. Если SQL — всё немного сложнее. А если ещё и закончилось место в хранилище баз данных СУБД, а расширять хранилище нет места/возможности — то это вообще проблема. Но мы поможем!
Итак, нашему клиенту понадобилась работающая копия SQL версии базы данных 1С:Предприятие. На SSD с корнем хранилища PostgreSQL осталось меньше 10Гб, а нам надо около 70Гб. На соседних HDD место есть. В качестве сервера у нас Windows Server 2008R2. Исходная база данных будет называться PG_1CBase. Создаваемая копия будет называться PG_1CBase_NEW.
- Делаем резервную копию базы данных 1С с помощью pg_dump:
C:\Program Files\PostgreSQL\9.4.2-1.1C\bin>pg_dump.exe -U postgres -F c -b PG_1CBase > E:\PG_1CBase.backup
За ключом -U указываем имя пользователя для доступа к серверу PostgreSQL, -F с — это формат custom. После вводе этой команды необходимо ввести пароль для пользователя postgres.
- Заходим в Администрирование серверов 1С:Предприятие:
Console Root > Central 1C:Enterprise 8.3 servers > (*) %Server_Name% > Кластеры > Локальный кластер > Информационные базы.
- Создаём пустую базу данных с названием PG_1CBase_NEW, ставим галочку «Создать базу данных в случае её отсутствия».
- Идём в корень хранилища баз данных PostgreSQL, перемещаемся вглубь:
%pg_root%\data\base
- Папка, находящиеся там, это базы даннх. Ищем последнюю созданную папку (её имя — большее число). Размер папки будет от 6Мб до12Мб. В нашем случае эта папка имеет имя 1885847. Полный путь новой БД:
%pg_root%\data\base\1885847
- Через pgAdmin останавливаем службу PostgreSQL:
Группы серверов > Серверы > localhost:5432 > ПКМ > Остановить службу
- На раздел с достаточным количеством свободного места переносим папку с созданной базой данных из пункта 5. В корне хранилища PostgreSQL её больше быть не должно. Новый путь будет выглядеть, например, так:
E:\1885847
- В правах на эту папку добавим пользователя postgres (так назвали пользователя СУБД при установке), дадим ему полные права.
- Теперь начинается магия. Чтобы ОС думала, что база данных лежит в хранилище PostgreSQL, а физически она находилась в другом месте, создаём символьную ссылку (симлинк или symlink) в командной строке от имени Админинистратора:
mklink /j /D "%pg_root%\data\base\1885847" "E:\1885847"
Появится сообщение о том, что символьная ссылка успешно создана. В исходной папке появится ярлык. Но если Вы кликните по нему, то в адресной строке увидите не новый путь E:\1885847, а старый путь.
- ВАЖНО! После переноса директории, в pgAdmin при доступе к новой базе Вы можете увидеть сообщение «FATAL: could not open file «…»: Permission denied». Это значит, что у новой папки по новому пути нет прав для Windows пользователя postges (системный пользователь, не пользователь PostgreSQL!). Права должны быть полными. Даются через ПКМ по новой папке > Свойства > Безопасность > Изменить… > …
- Через pgAdmin запускаем службу PostgreSQL:
Группы серверов > Серверы > localhost:5432 > ПКМ > Запустить службу
- А дальше просто восстанавливаем базу данных 1С:Предприятие из созданной ранее копии:
C:\Program Files\PostgreSQL\9.4.2-1.1C\bin>pg_restore.exe -U postgres -d PG_1CBase_NEW E:\PG_1CBase.backup
После этого вы получите 2 рабочие базы данных 1С:Предприятие: одна будет рабочая, другая для тестов.