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