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

Pau*_*ems 1 windows postgresql shell batch-file

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

我已经创建了一个批处理文件来在每个数据库上调用psql并运行脚本.这工作正常,除了在shell中我有比我的输出文件更多的消息.当出现问题时(即失败的唯一索引),我会在shell中看到它,但不会在我的输出文件中看到它.而且因为shell充满了消息,我错过了错误和警告.

在我使用的pgsql脚本中

    SET client_min_messages to 'LOG';
    raise log 'Dropped index %', l_index_name;
Run Code Online (Sandbox Code Playgroud)

我的Windows批处理文件是

    @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
Run Code Online (Sandbox Code Playgroud)

我一直在阅读关于使用> output.log的帖子,比如

    create_indexes.bat >output.log
Run Code Online (Sandbox Code Playgroud)

该文件已创建,但只有一些不相关的消息.

任何建议都非常受欢迎.

MC *_* ND 6

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

create_indexes.bat >output.log 2>&1
Run Code Online (Sandbox Code Playgroud)

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