来自bash的psql时序

时间:2016-04-29 09:05:40

标签: bash postgresql

我需要远程比较许多postgresql从属的性能

我找不到一个好的方法来写下这样的东西:

echo "\timing on     select now() ; " | ssh me@server "psql foo_db"

尝试使用'-e'作为回声,有些'\',

我只是'正在开启'并且一些额外的参数'xxxx'被忽略

2 个答案:

答案 0 :(得分:3)

在我的系统上,ssh根本没有通过标准输入,因此我将整个管道放入参数中。我最终得到的是:

ssh me@server "echo \"\timing on \\\\\ select now();\" | psql foo_db"

字符串中的\"允许我在必要时在SQL本身中使用'strings'。笨拙的\\\\\序列归结如下:

  • 外部双引号字符串(传递给ssh)将每个\\减少为\,为\\\提供echo "timing on \\\ select now();"
  • 内部双引号字符串(传递给远程echo)再次缩减为\\,提供timing on \\ select now();
  • 这允许我们混合psql元命令和没有多行的SQL,如手册中所述:
  

特殊序列\\(两个反斜杠)标记参数的结尾并继续解析SQL命令(如果有的话)。这样,SQL和psql命令可以在一行中自由混合。

答案 1 :(得分:1)

一位同事告诉我:

ssh me@server psql foo_db -Atq <<EOT
\timing on
select now();
EOT