Функция Debug PostgreSQL с использованием pgAdmin

Я отсылаю this, чтобы включить отладчик на сервере PostgreSQL для отладки функции plpgsql, перейдя через коды с помощью pgadmin.

Я уже установил shared_preload_libraries = '$libdir/plugins/plugin_debugger.dll' в postgresql.conf, запустил pldbgapi.sql и перезапустил сервер.

Эти шаги должны быть успешно выполнены, и plugin_debugger.dll должен быть успешно загружен, как это можно проверить, используя команду show shared_preload_libraries, и я могу увидеть параметр отладки в контекстном меню, щелкнув правой кнопкой мыши на функции в pgAdmin,

enter image description here

При выборе "Отладка" → "Отладка" появляется окно, позволяющее мне вводить значения для входных параметров. Но после этого, когда я нажимаю OK, он не отвечает вообще.

enter image description here

Любые идеи или я что-то пропустил в настройке отладчика на сервере

Я использую PostgreSQL 8.3 и pgAdmin 1.14

Ответ 1

Вы должны включить отладку в двух местах. В PGAdmin и самой базе данных. Эта статья, на которую вы ссылались, прекрасно справляется с этим, но есть некоторые нюансы.

PGAdmin

При обновлении вашего файла postgresql.conf для загрузки библиотеки отладки я был запущен PGAdmin в Windows, поэтому файл был здесь:

C:\Program Files\PostgreSQL\9.4\data\postgresql.conf

И путь к plugin_debugger.dll был фактически

$libdir/plugin_debugger.dll

не

$libdir/plugins/plugin_debugger.dll

как указано в статье. Поэтому вашей postgresql.conf нужна строка, подобная этой

shared_preload_libraries = '$libdir/plugin_debugger.dll'

Найдите фактическую .dll, если у вас есть сомнения. Если вы находитесь в Linux, файл, который вы ищете, plugin_debugger.so. Не забывайте, что для изменения файла postgresql.conf потребуется перезагрузка, чтобы изменения вступили в силу.

База данных PostgreSQL

Предполагая, что вы используете свою базу данных PostgreSQL на сервере Linux этот метод отлично справляется с объяснением того, как загружать зависимости для включения отладки. Убедитесь, что вы используете root при установке.

Часть, которую легко пропустить, выдает команду против фактической базы данных, которую вы хотите отлаживать. Для более новых версий на PostgreSQL все, что вам нужно сделать, это следующее:

CREATE EXTENSION IF NOT EXISTS pldbgapi;

Если это не возвращает ошибку, вам должно быть хорошо идти.

Некоторые примечательные примечания:

  • Как упоминалось выше, вы можете отлаживать только при работе в качестве учетной записи суперпользователя.
  • Из своих документов вы можете только отлаживать функции pl/pgsql. Поэтому, если ваша функция говорит что-то вроде LANGUAGE c PGAdmin даже не отобразит параметр "Отладка" правой кнопкой мыши при выборе функции. Найдите что-то, что имеет LANGUAGE plpgsql, и меню Debug должно показать.

Ответ 2

Кен,

Вы пробовали pgAdmin 1.8, чтобы исключить проблему с взаимодействием PgAdmin 1.14/PostgreSQL 8.3. Прошло некоторое время с тех пор, как я использовал 8.3 и для статьи, которую я написал, - о которой вы говорите, я тестировал с помощью 1.14/PostgreSQL 9.1, поэтому вполне может быть проблема с взаимодействием со старой версией. К сожалению, у меня больше нет теста 8.3.

Я смутно помню, что у вас был вопрос, который у вас был один раз, но это было тогда, когда у меня была другая общая библиотека в моем postgresql.conf в дополнение к pldebugger. Не помню, какой из них был, но удаление другой разделяемой библиотеки исправило мою проблему.

Надеюсь, что некоторые из этих предложений помогут, Regina

Ответ 3

У меня была та же проблема. Убедитесь, что только общий lib, который вы загружаете в postgres.conf, является отладчиком. Ничего больше. Даже профайлер. Если вы получаете ошибку SSL при попытке отладки функции, подключитесь к серверу.