我必须使用 BASH 连接到我们的 PostgreSQL 9.1 数据库服务器以执行各种 SQL 语句。
由于反复打开/关闭过多的数据库连接,我们遇到了性能问题(现在,我们将每个语句发送到 psql 命令)。
我正在研究使用命名管道为 SQL 语句 block 维护打开的数据库连接的可能性。
我遇到的问题是,一旦我打开一个连接并执行一条 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
最佳答案
使用--file=filename
用于批量执行。
根据您对流量控制的需要,您可能希望使用另一种具有更灵活的 DB API 的语言(Python 是我的选择,但可以使用任何有效的方法)。
关于bash - 在 BASH 中使用与 PostgreSQL 的开放数据库连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9199924/