Каждый системный администратор или разработчик 1С, работающий с СУБД PostgreSQL на операционной системе Windows 7 или Windows Server 2008 R2, рано или поздно сталкивался с капризами графического интерфейса pgAdmin 4. Особенно остро эта проблема стояла в ранних версиях (от v2.1 до v4.x), когда приложение могло запуститься один раз, а при повторном открытии или вводе пароля пользователя намертво зависнуть или вылететь с системной ошибкой аварийного завершения программы.
В рамках этой статьи мы подробно разберем, почему десктопная версия pgAdmin 4 ведет себя столь нестабильно на Windows 7, проанализируем неочевидные системные причины сбоев и пошагово внедрим надежные методы устранения неполадок.
Чтобы понять, как решить проблему, сначала проанализируем ситуацию с технической стороны. Архитектура pgAdmin 4 версий v1.x–v4.x представляет собой локальный веб-сервер, написанный на языке Python (с использованием веб-фреймворка Flask), который упакован в десктопный контейнер на базе графической библиотеки Qt5 (процесс pgAdmin4.exe). Эта связка оказалась крайне неудачной для старых версий Windows по нескольким причинам:
Qt5Gui.dll очень часто вызывает критическую ошибку обращения к памяти (Access Violation, код исключения c0000005). Программа падает мгновенно при отрисовке интерфейса.KB2999226 фоновый процесс Python просто не может инициализироваться, из-за чего графическая оболочка аварийно закрывается.pgadmin4.db). Если предыдущий сеанс завершился некорректно, зависший в памяти процесс python.exe или pgAdmin4.exe продолжает удерживать файл базы. При попытке повторного запуска и авторизации новый процесс натыкается на блокировку записи, не может обработать мастер-пароль и аварийно завершается.C:\Users\Администратор\AppData...), встроенные библиотеки шифрования Python некорректно декодируют пути к файлам ключей. Это приводит к моментальному вылету приложения при попытке сохранения или проверки пароля подключения.---
Рассмотрим подробнее несколько практических сценариев восстановления работоспособности среды администрирования PostgreSQL.
Как показывает практика практикующих администраторов, самый надежный способ заставить работать pgAdmin 4 версий 4.x — это полностью отказаться от нестабильного десктопного контейнера Qt5 и запустить приложение как полноценный локальный веб-сервер. Для этого выполним следующие действия:
C:\Program Files (x86)\pgAdmin 4\v4\web\ или аналогичный путь).config.py. Чтобы не испортить дистрибутив, создадим в этой же папке пустой текстовый файл с именем config_local.py.config_local.py в текстовом редакторе и принудительно укажем запуск в режиме веб-сервера, добавив следующую строку:
SERVER_MODE = True
После этого запустим pgAdmin. Программа откроет консольное окно веб-сервера и предоставит локальную ссылку (например, http://127.0.0.1:5050). Скопируем этот адрес и откроем его в браузере Mozilla Firefox. В веб-интерфейсе авторизация и работа с базой данных будут проходить без сбоев и падений графической оболочки.
Если pgAdmin стабильно вылетает именно при попытке ввода пароля, нам необходимо сбросить поврежденную базу данных настроек и завершить зависшие процессы. Разберем этот процесс по шагам:
Ctrl + Shift + Esc) и перейдем на вкладку «Процессы». Нам нужно принудительно завершить все процессы с именами pgAdmin4.exe, python.exe и pgadmin.exe.
taskkill /f /im pgAdmin4.exe
taskkill /f /im python.exe
C:\Users\<Имя_Пользователя>\AppData\Roaming\pgAdmin. Обратите внимание, что папка AppData по умолчанию скрыта в Windows.pgAdmin (или переименуем ее в pgAdmin_bak для сохранения старых подключений). При следующем запуске программа заново создаст чистый и неповрежденный файл конфигурационной базы данных pgadmin4.db.Бывает ситуация, когда при попытке запуска в браузере или десктоп-клиенте страница авторизации остается пустой («белый экран») или зависает на этапе бесконечной загрузки. Причина кроется в повреждении системного реестра сторонними программами, которые меняют ассоциацию файлов сценариев JavaScript.
Проанализируем ситуацию: браузер пытается загрузить скрипты интерфейса pgAdmin, но операционная система отдает их с некорректным MIME-типом text/plain вместо text/javascript, из-за чего браузер блокирует их выполнение из соображений безопасности.
Для исправления этой ошибки создадим и применим файл реестра:
fix_js.reg.
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\.js]
"Content Type"="text/javascript"
---
Интересный и очень практичный совет дают опытные разработчики 1С: если вам не хочется держать на рабочем сервере лишние запущенные браузеры, вы можете встроить веб-интерфейс pgAdmin прямо в вашу рабочую базу 1С. Для этого используется стандартный объект платформы ПолеHTMLДокумента.
Посмотрим на пример реализации такой интеграции. Создадим новую обработку в конфигураторе, добавим на форму поле HTML-документа с именем ПолеИнтерфейсаБД и пропишем в модуле формы следующий код:
&НаКлиенте
Процедура ПриОткрытии(Отказ)
// Укажем локальный адрес запущенной веб-службы pgAdmin 4
Элементы.ПолеИнтерфейсаБД.Перейти("http://127.0.0.1:5050/browser/");
КонецПроцедуры
Запустив эту обработку в режиме «1С:Предприятие», мы получим полноценную консоль управления PostgreSQL прямо внутри нашего привычного рабочего пространства 1С.
---
Если стабильно запустить pgAdmin 4 на устаревшей операционной системе Windows 7 так и не удалось, а устанавливать тяжеловесные браузеры на нагруженный сервер базы данных нет возможности, настоятельно рекомендуем рассмотреть альтернативные и более стабильные инструменты администрирования: