我一直在测试产品的连接性和稳定性,我的部分测试就是打开8个终端窗口,并启动一个使用psql查询远程数据库10次的脚本,每次查询获取50k行。我有命令别名,因为我计时,将结果记录到另一个文件等等。就在这里我会承认我不确定这是不是很好的做法,我对bash配置文件有点新鲜其余的。点击8个窗口(全部在一个更大的窗口内)变得非常烦人,所以我想我会尝试使用“&”在后台发射10次。这被证明是有问题的,并且比手动告诉8个窗口启动脚本要成功得多。主要是,我正在做的“&&&& etc等”的窗口永远不会“返回”,我必须按CTRL-C返回提示。另外,我从psql获得了更多的服务器错误。以下是我正在运行的两个命令,有些模糊和缩写:
test="(time bash ~/Documents/some/other/folders/myPsql.sh) >> \
~/Documents/some/stuff/logfile.txt 2>&1 && echo done"
shortcut="test & test & test & test & test & test & test & test & test & test"
这是psql脚本,当通过上面的“test”命令运行时工作正常:
psql << EOF
\pset pager off
\pset timing on
\copy (select * from sometable limit 50000) to '~/Documents/some/folder/file.csv' csv;
\q
EOF
我对这里工作的很多活动部分都很陌生,所以我认识到我所做的事情在某种程度上可能存在根本性的缺陷。
是否有任何“好”/更好的方法让我的“快捷方式”命令更加成功?
编辑:这是我所指的错误:
psql:服务器意外关闭了连接 这可能意味着服务器异常终止 处理请求之前或处理时。
我在Mac上使用iTerm2,而psql正在“与”本地软件客户端“交谈”,该客户端正在与Predix(CloudFoundry)上的其他软件进行交互,以查询Postgres数据库,也在Predix上。
答案 0 :(得分:2)
A2:C9
是标准化的shell命令。用你自己的名字覆盖它会打破相当多的脚本/函数/等。
test
一些注意事项:
psqlTest() {
# DANGER: This filename can be used for SQL injection attacks. Keep it under control.
local outFile=${1:-~/Documents/some/folder/file.csv}
psql <<EOF
\\pset pager off
\\pset timing on
\\copy (select * from sometable limit 50000) to '$outFile' csv;
\\q
EOF
}
parallelPsqlTest() {
local count=${1:-10} # if not given a number, start 10 versions of our test
for ((i=0; i<10; i++)); do
psqlTest &
done
}
对shell有意义,但不对大多数其他程序有意义。因此,在 shell启动路径传递给哪个软件之前,您希望将其展开(替换为~
或/home/whatever
)。/Users/whatever
作为您自己的命令:它是http://pubs.opengroup.org/onlinepubs/9699919799/utilities/test.html指定的test
命令的正常名称[
而不是由shell本身解释。