bash - 在 BASH 中使用与 PostgreSQL 的开放数据库连接?

标签 bash postgresql named-pipes postgresql-9.1

我必须使用 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/

相关文章:

linux - 在保留格式的同时按时间顺序对文本 block 进行排序

java 文件是从命令行执行的,而不是从浏览器(apache)执行的?

postgresql - 如何使用 -f 选项将 sql 脚本文件列表传递给 psql

php - 在运行 MAMP 的 Mac OS X 中安装 PostGresQL 和 MySQL?

c++ - 即使缓冲区被未决操作覆盖,WriteFile 也成功

BASH 命名管道锁定

bash 脚本覆盖执行的第二个脚本中的硬编码变量

php - 通过 php 用户在 root 上管理 Linux screen

sql - 这种情况下的 GUID/UUID?还是复合键?或其他

java - Java 中命名管道的并发读/写(在 Windows 上)