我在函数中有调试消息。这些信息被提出来
RAISE NOTICE 'Value of id : %', id;
我将我的日志文件设置为\o messages.txt
然后我做我需要做的事情\i process.sql
而当执行终止时,\o
.
问题是我没有将通知引发的消息放入messages.txt。消息显示在屏幕上,但我希望将它们写入messages.txt
我怎么能那样做?
我尝试使用RAISE LOG...
并将消息写入日志文件中......这不是我想要的。
我有一个解决办法
plsql -f /path/to/process.sql > messages.txt 2>&1
但我想知道如何在 plsql 客户端上使用 \i 和 \o 将消息放入 \o 中指定的文件中
我的客户端,在 cygwin 上是 psql (PostgreSQL) 8.2.11,服务器版本是 9.0.7
恐怕您不会喜欢这个答案,但目前似乎不可能。从psql 文档:
psql
正如您所注意到的,交互式使用时无法重定向错误消息。(我一直在玩从 \o 到无济于事的各种重定向。看起来查询输出通道与获取错误消息的通道不同 - 甚至来自服务器的错误和在您的程序中引发的错误也会以不同的方式出现.
out.sql 包含
在这两种情况下。这就是为什么我对用于输出从过程中引发的消息的通道/文件描述符一无所知的原因。))
(PostgreSQL-hackers 上有一个帖子可能会阐明这个问题: http: //postgresql.1045698.n5.nabble.com/psql-output-locations-td5068313.html)
一个人可能做的就是
psql
开始这会将所有输出重定向到指定的文件。唯一的问题是您甚至没有提示,并且失去了命令行编辑功能。
\!
我们可以使用meta 命令直接从 psql 执行 shell命令。打开.
debug.txt
_\e
raise 消息将显示在您的默认编辑器中。有点棘手,对于命令行爱好者来说仍然很方便。
不是原始问题的解决方案,而是 OP 解决方法的补充(这对我不起作用)
使用以下作为 raiseTest.sql
我不确定,为什么将输出写入 OP 中所述的文件不起作用,但将其通过管道传输到tee实际上可以解决:
Tee 将标准输入写入一个或多个文件并返回标准输出。因此,您将在控制台和您提供的文件中拥有所有 RAISE 语句。(参见tee 的手册页)
配置:
这是一个打印到 stdout 和 stderr 的函数,可用于跟踪云上的脚本运行。