Мне нужно использовать 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