У меня есть отладочные сообщения в функциях. Эти сообщения поднимаются как
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
но я хотел бы знать, как я мог бы использовать \ i и \ o на клиенте plsql, имеющем сообщения в файл, указанный в \ o
Мой клиент на cygwin - это psql (PostgreSQL) 8.2.11, а версия сервера - 9.0.7.
postgresql
Люк М
источник
источник
psql
?libpq
Я мог бы понять, если у вас есть непереносимое программное обеспечение, которое должно работать в Cygwin, но когдаpsql
оно доступно изначально для Windows, в чем смысл использовать древнюю версию Cygwin?Ответы:
Боюсь, вам не понравится этот ответ, но в настоящее время он кажется невозможным. Из документации PSQL :
И, как вы заметили, при
psql
интерактивном использовании невозможно перенаправить сообщения об ошибках .(Я перебирал все виды перенаправления с \ o безрезультатно. Похоже, что выходной канал запроса отличается от того, который получает сообщения об ошибках - и даже ошибки с сервера и возникающие в ваших процедурах идут разными путями ,
out.sql содержит
в обоих случаях. Вот почему я не знаю, какой дескриптор канала / файла используется для вывода сообщений, выданных процедурой.))
(В PostgreSQL-хакерах есть ветка, которая может пролить свет на эту проблему: http://postgresql.1045698.n5.nabble.com/psql-output-locations-td5068313.html )
Что можно сделать, это начать
psql
каки это перенаправит весь вывод в указанный файл. Единственная проблема с этим, что у вас даже нет приглашения, и вы теряете возможности редактирования командной строки.
источник
\o | cat > out.sql 2>&1
перенаправляет стандартную ошибку,cat
но не одну изpsql
, так что это бесполезно для уведомлений.NOTICE
информацию?psql
, так что, вероятно, без проблем.client_min_message
вdebug
рамках моей сессии и запустить некоторую динамическую SQLs с (DO
- без создания какой - либо функции), она поднимает уведомление pgAdmin, не с PSQL. Я напечаталclient_min_message
значение перед выполнениемDO
оператора. Это показываетdebug
, но сообщение не печатается в консоли.Мы можем выполнить команду оболочки напрямую из psql, используя
\!
команду meta.открыть
debug.txt
с\e
.поднять сообщение будет показано в вашем редакторе по умолчанию. немного хитрый, все еще весьма удобный для любителя CommandLine.
источник
Не решение исходного вопроса, а дополнение к обходному пути ОП (который не работал для меня)
Со следующим как RaiseTest.sql
Я не уверен, почему записи вывода в файл , как указано в ОП не работает, но обжигающе его в тройник фактически выработанного:
Ти записывает стандартный ввод в один или несколько файлов и обратно в стандартный вывод. Таким образом, вы будете иметь все операторы RAISE в своей консоли и в предоставленных вами файлах. (см. справочную страницу Ти )
Конфигурация:
источник
NOTICE
во время интерактивного сеанса и использования\o