【问题标题】:Making an empty output from psql从 psql 生成空输出
【发布时间】:2013-01-17 16:04:50
【问题描述】:

我正在运行一个执行复杂查询的 psql 命令。查询不会产生任何结果,因此 psql 在输出中返回“(无行)”。

有没有办法让 psql 返回一个空字符串?

我已尝试在所有变体中使用 --pset=tuples-only=on 和 --pset=footer=off 和 -q,但它似乎不起作用。

页脚选项在 psql shell 提示符下有效,但在脚本中无效。

在 9.1.7 上试过,8.4、9.1 和 9.2 都需要这个。

【问题讨论】:

    标签: postgresql psql


    【解决方案1】:

    可能已经足够了:

    $ psql -Axt -c 'select 1 where 1=0'
    

    产生一个空字符串

    编辑以下 cmets: 上面的命令产生一个空行,因此包含和行尾。

    要完全不产生任何内容,请删除 -x 选项。

    反正不会对shell有什么影响,如下图:

    带 -x:

    r=`psql -Atx -d test -c "select 1 where 1=0"` 回声 $r | od -c 0000000 \n 0000001

    没有-x:

    r=`psql -At -d test -c "select 1 where 1=0"` 回声 $r | od -c 0000000 \n 0000001

    【讨论】:

    • 这不会产生一个空字符串,它会产生“no row”——这构成了 Alex 的问题。 SELECT '' 产生一个空字符串。
    • wfm;我只是得到一个空行,9.2.2
    • OK,如果你想要 NO 行,那么使用 psql -Atc "select '';"或选择 where 1=0 等。如果你使用 -Atxc 那么你会得到一条线,因为那是扩展的输出。我一直在 bash 脚本中使用 psql -Atc ,因为没有页眉或页脚,而且每行只能返回一行。使用正确的 bash 读取语法,您可以在 bash btw 中将每一行拆分为单独的变量。
    • @Erwin:我不明白为什么你得到“没有行”。我没有,显然其他人也没有。
    • @DanielVérité:嗯,你是对的,因为正如 Scott 解释的那样,带有 -x 选项的 psql 会为“无行”插入换行符。这最终与您在附录中详述的相同。但它也会改变输出格式——只要查询不返回任何行,这并不重要。
    【解决方案2】:

    有没有办法让 psql 返回一个空字符串?

    您可以在第一个查询之后简单地附加SELECT ''。 例如:

    psql -Atp5432 mydb -c "SELECT 1 WHERE FALSE; SELECT ''"
    

    SELECT 1 WHERE FALSE 替换为不返回行的复杂查询。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-02
      • 1970-01-01
      • 1970-01-01
      • 2017-08-18
      相关资源
      最近更新 更多