web-dev-qa-db-fra.com

Débogage de la fonction PostgreSQL à l'aide de pgAdmin

Je fais référence à this pour activer le débogueur sur le serveur PostgreSQL afin de déboguer la fonction plpgsql en parcourant les codes à l'aide de pgadmin.

J'ai déjà défini shared_preload_libraries = '$libdir/plugins/plugin_debugger.dll' dans le postgresql.conf, courir pldbgapi.sql et redémarré le serveur.

Ces étapes auraient dû être exécutées avec succès et plugin_debugger.dll doit être chargé avec succès, comme cela peut être vérifié à l'aide de la commande show shared_preload_libraries, et je peux voir l'option de débogage dans le menu contextuel avec un clic droit sur une fonction dans pgAdmin.

enter image description here

Lorsque vous choisissez "Debugging" -> Debug, une fenêtre apparaît pour me permettre d'entrer les valeurs des paramètres d'entrée. Mais après cela, lorsque j'appuie sur OK, il ne répond plus du tout.

enter image description here

Des idées ou ai-je raté quelque chose dans la configuration du débogueur sur le serveur ??

J'utilise PostgreSQL 8.3 et pgAdmin 1.14

65
Ken Chan

Vous devez activer le débogage à deux endroits. Sur PGAdmin et sur la base de données elle-même. Cet article auquel vous avez fait référence fait un excellent travail pour l'expliquer, mais il y avait quelques nuances.

PGAdmin

Lors de la mise à jour de votre postgresql.conf fichier pour charger la bibliothèque de débogage, j'étais exécutant PGAdmin sous Windows donc le fichier était ici:

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

Et le chemin vers le plugin_debugger.dll était en fait

$libdir/plugin_debugger.dll

ne pas

$libdir/plugins/plugin_debugger.dll

comme spécifié dans l'article. Alors votre postgresql.conf aurait besoin d'une ligne comme celle-ci

shared_preload_libraries = '$libdir/plugin_debugger.dll'

Recherchez le fichier .dll réel en cas de doute. Si vous êtes sous Linux, le fichier que vous recherchez est plugin_debugger.so. N'oubliez pas que changer le postgresql.conf le fichier nécessitera un redémarrage pour que la modification prenne effet.

Base de données PostgreSQL

En supposant que vous exécutez votre base de données PostgreSQL sur un serveur Linux ce Gist fait un excellent travail pour expliquer comment télécharger les dépendances pour activer le débogage. Assurez-vous que vous exécutez en tant que root lors de l'installation.

La partie qui est facile à manquer est de lancer la commande sur la base de données que vous souhaitez déboguer. Pour les versions plus récentes de PostgreSQL, tout ce que vous aurez à faire est le suivant:

CREATE EXTENSION IF NOT EXISTS pldbgapi;

Si cela ne renvoie pas d'erreur, vous devriez être prêt à partir.

Quelques points supplémentaires à noter:

  • Comme mentionné ci-dessus, vous pouvez uniquement déboguer lors de l'exécution en tant que compte de super-utilisateur
  • Depuis leurs documents vous ne pouvez que déboguer les fonctions pl/pgsql. Donc, si votre fonction dit quelque chose comme LANGUAGE c PGAdmin n'affichera même pas d'option de menu Déboguer avec le bouton droit lorsque vous sélectionnez la fonction. Recherchez quelque chose qui a LANGUAGE plpgsql et le menu Debug devrait s'afficher.
6
Joel B

Ken,

Avez-vous essayé pgAdmin 1.8 pour éliminer un problème d'interaction avec PgAdmin 1.14/PostgreSQL 8.3. Cela fait un moment que je n'ai pas utilisé 8.3 et pour l'article que j'ai écrit - auquel vous faites référence, je testais avec 1.14/PostgreSQL 9.1, donc cela pourrait très bien être un problème avec l'interaction avec une version plus ancienne. Malheureusement, je n'ai plus de 8.3 pour tester.

Je me souviens vaguement d'avoir eu le problème que vous aviez une fois, mais c'était quand j'avais une autre bibliothèque partagée dans mon postgresql.conf en plus du pldebugger. Je ne me souviens plus laquelle, mais la suppression de l'autre bibliothèque partagée a résolu mon problème.

J'espère que certaines de ces suggestions vous aideront, Regina

2
LR1234567

J'ai eu le même problème. Assurez-vous que la bibliothèque partagée seulement que vous chargez dans le postgres.conf est le débogueur. Rien d'autre. Pas même le profileur. Si vous obtenez une erreur SSL lorsque vous essayez de déboguer une fonction, reconnectez-vous au serveur.

1
foo