Tengo mensajes de depuración en funciones. Esos mensajes se plantean como
RAISE NOTICE 'Value of id : %', id;
Configuré mi archivo de registro con \o messages.txt
Entonces hago lo que tengo que hacer con \i process.sql
Y cuando se termina la ejecución, \o
.
El problema es que no tengo los mensajes generados por avisos en messages.txt. Los mensajes se muestran en la pantalla pero quiero que se escriban en messages.txt
¿Cómo podría hacer eso?
Traté de usar RAISE LOG...
y los mensajes están escritos en el archivo de registro ... No es lo que quiero.
Tengo un trabajo con
plsql -f /path/to/process.sql > messages.txt 2>&1
pero me gustaría saber cómo podría usar \ i y \ o en el cliente plsql que tiene los mensajes en el archivo especificado en \ o
Mi cliente, en cygwin es psql (PostgreSQL) 8.2.11 y la versión del servidor es 9.0.7
fuente
psql
?libpq
Podría entender si tiene un software no portátil que debe ejecutarse en Cygwin, pero cuandopsql
está disponible de forma nativa para Windows, ¿cuál es el atractivo de ejecutar una versión antigua en Cygwin?Respuestas:
Me temo que no le gustará esta respuesta, pero actualmente parece imposible. De la documentación de psql :
Y como notó, no hay forma de redirigir los mensajes de error cuando se usa de forma
psql
interactiva.(He estado jugando con todo tipo de redireccionamiento de forma inútil. Parece que el canal de salida de la consulta es diferente del que recibe los mensajes de error, e incluso los errores del servidor y generados en sus procedimientos son diferentes .
out.sql contiene
en ambos casos. Es por eso que no tengo idea de qué canal / descriptor de archivo se utiliza para enviar los mensajes generados por un procedimiento.))
(Hay un hilo en los hackers de PostgreSQL que puede arrojar algo de luz sobre este problema: http://postgresql.1045698.n5.nabble.com/psql-output-locations-td5068313.html )
Lo que uno podría hacer es comenzar
psql
comoy esto redirigirá toda la salida al archivo especificado. El único problema con esto es que ni siquiera tiene un mensaje y pierde las capacidades de edición de la línea de comandos.
fuente
\o | cat > out.sql 2>&1
redirige el error estándar decat
pero no el depsql
, por lo que no sirve para los avisos.NOTICE
información pgAdmin o cualquier otra herramienta GUI ?psql
, así que probablemente sin ningún problema.client_min_message
adebug
dentro de mi sesión y ejecutar algunas sqls dinámicas con (DO
- sin crear ninguna función), se plantea aviso en pgAdmin al no con psql. Imprimí elclient_min_message
valor antes de ejecutar laDO
declaración. Se muestradebug
, pero el mensaje no se imprime en la consola.Podemos ejecutar el comando de shell directamente desde psql usando el
\!
comando meta.abrir
debug.txt
con\e
.el mensaje de subida se mostrará en su editor predeterminado. un poco complicado, aún bastante útil para el amante de la línea de comandos.
fuente
No es una solución a la pregunta original, sino una adición a la solución alternativa de OP (que no funcionó para mí)
Con lo siguiente como raiseTest.sql
No estoy seguro de por qué no funciona la escritura de la salida en un archivo como se indica en el OP, pero realmente funcionó conectarlo en tee :
Tee escribe el stdin en uno o más archivos y nuevamente en el stdout. Por lo tanto, tendrá todas las declaraciones RAISE en su consola y en los archivos que proporcionó. (cf. página de manual de tee )
Configuración:
fuente
NOTICE
mientras estás en una sesión interactiva y usarlos\o