【问题标题】:PSQL: How can I prevent any output on the command line?PSQL:如何防止命令行上的任何输出?
【发布时间】:2016-02-18 13:08:58
【问题描述】:

我的问题:我正在尝试通过批处理文件在命令行运行数据库生成脚本,作为 TFS 构建过程的一部分,以启用对已知数据集的夜间测试。

我们运行的脚本在命令行上输出通知、警告和一些错误。我想至少抑制通知和警告,如果可能的话,错误似乎不会对脚本的整体成功产生影响。就 TFS 构建过程而言,此输出似乎正在影响该过程的成功或失败。它将脚本的每一行输出突出显示为错误并导致构建失败。

由于我们的系统在 Windows 上运行,我在网上找到的大多数潜在解决方案似乎都针对 Linux 并不起作用。

我已在 postgresql.conf 文件中将 client_min_messages 更改为错误,但是当从 pgAdmin(工具 > 服务器配置)查看相同的配置时,它显示的值是错误但当前值作为通知。

批处理文件中调用 psql 的所有行也使用 -q 标志,但这似乎只是阻止了 CREATE TABLE 和 ALTER TABLE 等基本功能。

批处理文件中的示例行是:

psql -d 数据库 -q

此命令的示例输出行:

警告:“身份”列的类型为“未知” 详情:继续创建关系。

-f 标志指定文件没有区别。

我可以在我的开发机器上手动运行批处理文件,无论命令提示符上显示什么错误或消息,它都会生成预期的数据库。

所以最终我需要批处理文件中的所有 psql 命令静默运行。

【问题讨论】:

标签: windows command-line tfs postgresql-9.3 psql


【解决方案1】:

使用 psql -o 标志将命令输出发送到您想要的文件名或 /dev/null 如果您不关心它。

【讨论】:

    【解决方案2】:
    psql COMMAND &> output.txt
    

    或者,使用您的示例命令:

    psql -d database -q < C:\Database\scripts\script.sql &> output.txt
    

    【讨论】:

    • 感谢您的回复,但不幸的是它不起作用。您的示例中的语法不正确。将 &> 替换为 -o 会创建输出文件,但不会向其中写入任何内容。然后像往常一样输出到命令提示符。
    • 这导致我的一位同事建议 2> output.txt 这似乎有效。替换为 2> nul 将完全抑制所有输出,但有一个日志以防万一。
    • 我怀疑您的脚本中存在某些问题。发送 1> 到文件将 STDOUT 发送到文件, 2> 发送 STDERR 到文件。使用 &> 应该同时发送。我验证了这可行: psql -d database -h host -p port -U user -f test.sql &> output.txt
    • 感谢您的回复。我可以理解这应该输出到两者,但它似乎对我不起作用。以下是我运行它时看到的命令和输出。 c:\Database>psql -d database -q C:\Database\output.txt 命令语法错误。
    • 如果您使用的是 windows,请尝试在文件周围加上引号
    猜你喜欢
    • 1970-01-01
    • 2011-12-14
    • 1970-01-01
    • 2016-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多