Использование Python скриптов для обслуживания баз PostgreSQL

22.03.22

База данных - Инструменты администратора БД

Описание скрипта для обслуживания баз PostgreSQL.

Вводные

  • Сервера PostgreSQL с базами 1С на Ubuntu 20.04
    • установленный rclone и настроенное подключение к внешнему хранилищу
  • Желание автоматизировать рутинные операции
    • Резервное копирование через pg_dump
      • перенос на внешнее хранилище и управление границей хранения используя rclone
      • уведомления о выполнении пакета на https://healthchecks.io/
    • Перенос баз с сервера на сервер
      • миграция
      • разворачивание/обновление тестовых баз
  • Чтобы присутствовал логгер
  • Чтобы корректно отрабатывало исключения
  • Рабочий скрипт на bash, который запускается из под postgres на сервере c БД

 

Вариант решения

Написал скрипт на Python 3.8, он идет в стандартной поставке Ubuntu 20.04. Из плюсов написанный код достаточно просто понять и при необходимости поправить.

Использовал только стандартные библиотеки, чтобы можно было скопировать, добавить конфиг и запустить через cron например. Большинство команд это отдельные приложения поэтому запускаю их через subprocess (ссылка). Для переиспользования функции по работе с файлами выделил в отдельные файлы и подключаю в управляющие скрипты. Конфиг в формате JSON потому что он обрабатывается стандартной библиотекой.

С уважением отношусь к OneScript, но на данный момент удобнее писать на python. Обертки работы с сервером 1С пока нет, возможно буду использовать Odin (ссылка). Про то что бекап через pg_dump не самое лучшее решение знаю, до реплик, pg_wal и barman дорасту и напишу.

 

Создание резервной копии

После создания в локальную папку перемещает на внешнее хранилище и делает GET запрос при успешном выполнении пакета.

 
 Скрипт (pg_backup.py)

 

 
 Пример конфигурации (pg_backup_config.json)

 

Копия с prod на dev сервер указанной базы

Запускается командой "python3 pg_copy_prod_to_test.py --src-base rt --dst-base rt_test_1"

 
 Скрипт (pg_copy_prod_to_test.py)

 

 
 Пример конфигурации (pg_copy_prod_to_test_config.json)

 

Копирование списка баз с сервера на сервер

Использовал для перехода с 11 на 14 версию Postgres

  • создал новый контейнер с Postgres
  • остановил сервер 1С
  • перенес базы
  • поправил настройки подключения на сервере 1С
  • запустил сервер 1С
 
 Скрипт (pg_copy_base.py)

 

 
 Пример конфигурации (pg_copy_base_config.json)

 

Обработчики

Для работы с PG

 
 pg_handler.py

Для работы с файлами

 
 file_handler.py

Итог

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

 

Благодарю за внимание.

См. также

Автоподбор ролей для профилей и групп доступа в любых типовых базах 1С УТ 11, КА 2, ERP2, Розница 2/3, УНФ 16/3, БП 3, ЗУП 3 и подобных (УФ, Платформа 8.3.14+)

Инструменты администратора БД Роли и права 8.3.14 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Документооборот 1С:Зарплата и кадры государственного учреждения 3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)

Роли… Вы тратите много времени и сил на подбор ролей среди около 2400 в ERP или 1500 в Рознице 2, пытаясь понять какими правами они обладают? Вы все время смотрите права в конфигураторе или отчетах чтоб создать нормальные профили доступа? Вы хотите наглядно видеть какие права дает профиль и редактировать все в простом виде? А может хотите просто указать подсистему и дать права на просмотр и добавление на объекты и не лезть в дебри прав и чтоб обработка сама подобрала нужные роли? Все это теперь стало возможно! Обновление от 15.12.2023, версия 1.1.

12000 руб.

06.12.2023    3006    15    1    

34

SALE! 20%

Infostart УДиФ: Управление данными и формами

Инструменты администратора БД Инструментарий разработчика Роли и права Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на любую конфигурацию на управляемых формах.

10000 8000 руб.

10.11.2023    3634    11    1    

34

SALE! 30%

PowerTools

Инструментарий разработчика Инструменты администратора БД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

Универсальный инструмент программиста для администрирования конфигураций. Сборник наиболее часто используемых обработок под единым интерфейсом.

3600 2520 руб.

14.01.2013    177829    1074    0    

852

Ускоренное проведение документов (x4), устранение ошибок 60/62 счетов и зачет авансов (Бухгалтерия 3.0)

Закрытие периода Инструменты администратора БД Корректировка данных Бухгалтерский учет 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Расширение «Оперативное проведение» в 4 раза уменьшает время проведения документов и закрытия месяца. Является комплексным решением проблем 62 и 60 счетов. Оптимизирует проведение при включенной функциональной опции «Раздельный учет НДС». Используется в более 10 организациях уже 2 года. Совместимо с конфигурацией Бухгалтерия 3.0 (+КОРП).

14400 руб.

29.04.2020    27413    79    146    

60

Система хранения присоединенных файлов в томах на диске

Инструменты администратора БД Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Управление производственным предприятием Платные (руб)

Конфигурация Комплексная автоматизация 1.1 (и УПП 1.3 тоже) хранит файлы и изображения в справочнике Хранилище дополнительной информации в реквизите Хранилище типа ХранилищеЗначений. Та же история с ВложениямиЭлектроннойПочты. Но при этом присоединенные файлы в Электронном документообороте хранит в томах на диске. Эта доработка позволяет использовать стандартный механизм хранения файлов, изображений и вложений электронных писем в томах на диске. При этом можно разделить тома хранения по объектам конфигурации.

4200 руб.

10.11.2015    61324    88    59    

73

"Менеджер потоков 2.1": УПП: "Восстановление партий"

Инструменты администратора БД Платформа 1С v8.3 1С:Управление производственным предприятием Россия Бухгалтерский учет Управленческий учет Платные (руб)

Как оптимизировать то, что, считалось, не поддается оптимизации? Как повысить доступность базы данных? Как проводить самую «времяемкую» операцию не по паре раз в неделю, а по несколько раз в день*? Ответ есть!

20000 руб.

12.09.2019    11752    5    9    

7

Брандмауэр для сервера 1С Предприятие 8 - внешнее управление сеансами

Инструменты администратора БД Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Управление возможностью начала и возобновления сеансов пользователей по различным условиям, ограничение общего числа возможных сеансов для работы с информационной базой, резервирование возможности работы с информационной базой определенных польззователей, запрет запуска нескольких сеансов для пользователя, журнализация событий начала (возобновления) и завершения (гибернации) сеансов, ведение списка активных сеансов для информационных баз кластера серверов

3600 руб.

06.02.2017    31120    31    18    

47

Хранилище файлов на SQL

Инструменты администратора БД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Управленческий учет Платные (руб)

Привязка файлов / сканов к объектам 1С с сохранением их на SQL-сервере

12000 руб.

09.10.2019    10994    5    8    

9
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. mixsture 24.03.22 16:33 Сейчас в теме
raise Exception(f'Get DB list: {host} {result.stderr}')


эх, лучше брать пониже классы исключений. ValueError например. Потому что попытка перехватить Exception, который используется в вашем коде, будет заодно хватать Ctrl-C.
2. malikov_pro 1292 25.03.22 06:22 Сейчас в теме
(1) Благодарю за критику. Для 2 актуально, но для 3 "KeyboardInterrupt Начиная с 2.5 наследуется от BaseException, чтобы избежать отлова кодом, обрабатывающего Exception, что может мешать остановке интерпретатора."

Мне повод глубже изучить вопрос (использовать ValueError или сделать наследник от Exception), после поправлю код.
3. fatman78 17 22.04.22 11:55 Сейчас в теме
Можно еще для снятия копии с продуктовой базы (для тестовых копий и копий разработки без гарантий целостности) использовать штатную утилиту 1С - ibcmd. В этом случае уже нет привязки к версии SQL и можно сразу из .DT разворачивать файловую базу.
4. malikov_pro 1292 22.04.22 14:41 Сейчас в теме
(3) "В этом случае уже нет привязки к версии SQL" - на данный момент не вижу проблемы с версией СУБД в контексте 1С, переносил с 10 на 14, полет нормальный. Для больших объемов использование выгрузки в DT не рекомендуют.
Оставьте свое сообщение