我必须使用 BASH 连接到我们的 PostgreSQL 9.1 数据库服务器来执行各种 SQL 语句。
我们有一个由于重复打开/关闭太多数据库连接而导致的性能问题(现在,我们将每个语句发送到 psql 命令)。
我正在研究使用命名管道为 SQL 语句块维护开放数据库连接的可能性。
我遇到的问题是,一旦打开连接并执行 SQL 语句,我不知道何时停止从 psql 读取。我考虑过解析输出以查找提示,但考虑到字符可能嵌入到 SELECT 输出中的可能性,我不知道这是否安全。
有人有建议吗?
这是迄今为止我所拥有的简化示例...
#!/bin/bash
PIPE_IN=/tmp/pipe.in
PIPE_OUT=/tmp/pipe.out
mkfifo $PIPE_IN $PIPE_OUT
psql -A -t jkim_edr_md_xxx_db < $PIPE_IN > $PIPE_OUT &
exec 5> $PIPE_IN; rm -f $PIPE_IN
exec 4< $PIPE_OUT; rm -f $PIPE_OUT
echo 'SELECT * FROM some_table' >&5
# unfortunately, this loop blocks
while read -u 4 LINE
do
echo LINE=$LINE
done