【发布时间】:2012-02-08 19:17:30
【问题描述】:
我必须使用 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
【问题讨论】:
-
PostgreSQL 支持持久连接。您不需要一直打开和关闭连接。
标签: bash postgresql named-pipes postgresql-9.1