使用Windows将PostgreSQL shell输出保存到文件

我创build了一个pgsql脚本并将其保存到一个文件中。 这个脚本正在创buildidexes。 我需要在几个数据库上运行这个脚本。 我在Windows 8上使用PostgreSQL 9.3。

我创build了一个batch file在每个数据库上调用psql并运行脚本。 这工作正常,除了在我有更多的消息比在我的输出文件的shell。 意思是什么时候出错了(即失败的唯一索引)我看到它在shell中,但不是在我的输出文件。 而且因为shell里面充满了消息,所以我错过了错误和警告。

在我使用的pgsql脚本中

SET client_min_messages to 'LOG'; raise log 'Dropped index %', l_index_name; 

我的Windowsbatch file是

  @echo off set _psql="D:\Program Files\PostgreSQL\9.3\bin\psql.exe" set _server=localhost set _port=5432 set _file=create_indexes.sql set _log=create_indexes.log FOR %%G IN (db1 db2 db3) DO ( %_psql% -d %%G -h %_server% -p %_port% -U postgres -w postgres <%_file% >>%_log% echo Done with %%G ) pause 

我一直在阅读有关使用> output.log,像

  create_indexes.bat >output.log 

该文件被创build,但只有less数不相关的消息。

任何build议都是值得欢迎的。

您不仅需要重定向stdout(流1),还需要stderr(流2)

 create_indexes.bat >output.log 2>&1 

也就是说,将stderr的输出发送到流1正在发送的任何位置