Eu tenho mensagens de depuração em funções. Essas mensagens são levantadas como
RAISE NOTICE 'Value of id : %', id;
Defino meu arquivo de log com \o messages.txt
Então eu faço o que eu preciso fazer com \i process.sql
E quando a execução terminar \o
,.
O problema é que não tenho as mensagens geradas por avisos no messages.txt. As mensagens são exibidas na tela, mas eu quero que elas sejam escritas em messages.txt
Como eu pude fazer isso?
Eu tentei usar RAISE LOG...
e as mensagens são escritas no arquivo de log ... Não é o que eu quero.
Eu tenho um trabalho em torno de
plsql -f /path/to/process.sql > messages.txt 2>&1
mas gostaria de saber como eu poderia usar \ i e \ o no cliente plsql com as mensagens no arquivo especificado em \ o
Meu cliente, no cygwin, é o psql (PostgreSQL) 8.2.11 e a versão do servidor é 9.0.7
fonte
psql
?libpq
Eu poderia entender se você tem um software não portátil que precisa ser executado no Cygwin, mas quandopsql
está disponível nativamente para Windows, qual é o atrativo de executar uma versão antiga no Cygwin?Respostas:
Receio que você não goste desta resposta, mas atualmente parece impossível. Na documentação do psql :
E como você notou, não há como redirecionar mensagens de erro ao usar
psql
interativamente.(Venho brincando com todos os tipos de redirecionamento de \ o sem sucesso. Parece que o canal de saída da consulta é diferente daquele que recebe mensagens de erro - e até mesmo erros do servidor e disparados em seus procedimentos são diferentes. .
out.sql contém
em ambos os casos. É por isso que não entendo qual descritor de canal / arquivo é usado para gerar as mensagens geradas por um procedimento.))
(Existe uma discussão nos hackers do PostgreSQL que pode lançar alguma luz sobre esse problema: http://postgresql.1045698.n5.nabble.com/psql-output-locations-td5068313.html )
O que alguém poderia fazer é começar
psql
comoe isso redirecionará toda a saída para o arquivo especificado. O único problema com isso é que você nem tem um prompt e perde os recursos de edição da linha de comando.
fonte
\o | cat > out.sql 2>&1
redireciona o erro padrão de,cat
mas não o depsql
, portanto, não serve para os avisos.NOTICE
informações?psql
, provavelmente sem problemas.client_min_message
paradebug
dentro do meu sessão e executar alguns sqls dinâmicos com (DO
- sem criar qualquer função), ele levanta anúncio no pgAdmin por não com psql. Imprimi oclient_min_message
valor antes de executar aDO
instrução. Isso mostradebug
, mas a mensagem não está sendo impressa no console.Podemos executar o comando shell diretamente do psql usando o
\!
comando meta.abrir
debug.txt
com\e
.A mensagem raise será mostrada no seu editor padrão. um pouco complicado, ainda bastante útil para os amantes de CommandLine.
fonte
Não é uma solução para a pergunta original, mas uma adição à solução alternativa do OP (que não funcionou para mim)
Com o seguinte como raiseTest.sql
Não tenho certeza, por que gravar a saída em um arquivo como o observado no OP não funciona, mas encaminhá-lo para o tee realmente funcionou:
Tee grava o stdin em um ou mais arquivos e volta ao stdout. Portanto, você terá todas as instruções RAISE no seu console e nos arquivos que você forneceu. (consulte a página de manual do tee )
Configuração:
fonte
NOTICE
enquanto você estiver em uma sessão e uso interativo\o