J'ai des messages de débogage dans les fonctions. Ces messages sont élevés comme
RAISE NOTICE 'Value of id : %', id;
J'ai défini mon fichier journal avec \o messages.txt
Ensuite, je fais ce que je dois faire avec \i process.sql
Et lorsque l'exécution est terminée, \o
.
Le problème est que je n'ai pas les messages soulevés par les notifications dans messages.txt. Les messages sont affichés à l'écran mais je veux qu'ils soient écrits dans messages.txt
Comment pourrais-je faire ça?
J'ai essayé d'utiliser RAISE LOG...
et les messages sont écrits dans le fichier journal ... Ce n'est pas ce que je veux.
J'ai du travail avec
plsql -f /path/to/process.sql > messages.txt 2>&1
mais je voudrais savoir comment je pourrais utiliser \ i et \ o sur le client plsql ayant les messages dans le fichier spécifié dans \ o
Mon client, sur cygwin est psql (PostgreSQL) 8.2.11 et la version du serveur est 9.0.7
la source
psql
?libpq
Je pourrais comprendre si vous avez un logiciel non portable qui doit fonctionner dans Cygwin, mais quandpsql
est-il disponible en natif pour Windows, quel est l'intérêt de lancer une ancienne version sur Cygwin?Réponses:
Je crains que vous n'aimiez pas cette réponse, mais actuellement cela semble impossible. De la documentation psql :
Et comme vous l'avez remarqué, il n'y a aucun moyen de rediriger les messages d'erreur lors d'une utilisation
psql
interactive.(J'ai joué avec toutes sortes de redirection de \ o en vain. Il semble que le canal de sortie de la requête soit différent de celui qui reçoit les messages d'erreur - et même les erreurs du serveur et remontées dans vos procédures vont de différentes manières .
out.sql contient
dans les deux cas. C'est pourquoi je ne sais pas quel descripteur de canal / fichier est utilisé pour sortir les messages générés par une procédure.))
(Il existe un fil sur les pirates PostgreSQL qui peut apporter un éclairage sur ce problème: http://postgresql.1045698.n5.nabble.com/psql-output-locations-td5068313.html )
Ce que l'on pourrait faire, c'est commencer
psql
commeet cela redirigera toutes les sorties vers le fichier spécifié. Le seul problème avec cela, vous n'avez même pas d'invite et vous perdez les capacités d'édition en ligne de commande.
la source
\o | cat > out.sql 2>&1
redirige l'erreur standard decat
mais pas celle depsql
, il est donc inutile pour les avis.NOTICE
informations?psql
, donc probablement sans aucun problème.client_min_message
à l'debug
intérieur de ma session et j'exécute quelques sqls dynamiques avec (DO
- sans créer de fonction), cela fait remarquer dans pgAdmin pas avec psql. J'ai imprimé laclient_min_message
valeur avant d'exécuter l'DO
instruction. Il s'affichedebug
, mais le message ne s'imprime pas dans la console.Nous pouvons exécuter la commande shell directement à partir de psql en utilisant la
\!
commande meta.ouvrir
debug.txt
avec\e
.soulever le message s'affichera dans votre éditeur par défaut. un peu délicat, toujours très pratique pour les amoureux de commandLine.
la source
Pas une solution à la question d'origine, mais un ajout à la solution de contournement d'OP (qui n'a pas fonctionné pour moi)
Avec ce qui suit comme raiseTest.sql
Je ne suis pas sûr, pourquoi l'écriture de la sortie dans un fichier comme indiqué dans l'OP ne fonctionne pas, mais la canalisation dans le tee a en fait fonctionné:
Tee écrit le stdin dans un ou plusieurs fichiers et le remet dans le stdout. Vous aurez donc toutes les instructions RAISE dans votre console et dans le ou les fichiers que vous avez fournis. (cf. page de manuel de tee )
Configuration:
la source
NOTICE
pendant que vous participez à une session interactive et à les utiliser\o