Как получить psql результат в bash? - PullRequest
3 голосов
/ 31 марта 2011

Я пытаюсь получить результат psql в bash

echo 'SELECT * FROM fictive_table LIMIT 1;' >> /tmp/x.sql
psql --single-transaction -d dbname -f /tmp/x.sql
echo $?

Это не удастся, но результат, который я получаю в bash, равен 0. Есть ли проблемы с логикой / кодом?

Из руководства

psql возвращает 0 оболочке, если она закончилась нормально, 1, если смертельный возникает собственная ошибка (недостаточно памяти, файл не найден)

Обновление: @ Андреа Спадаччини прав. Это не смертельно. Как я могу поймать это?

Ответы [ 2 ]

3 голосов
/ 31 марта 2011

Возможно, ошибка, вызванная запросом, не является фатальной, как те, что упомянуты в руководстве, т. Е. Вам не хватает памяти, и она не получает ошибку "файл не найден".

Читая немного дальше в руководстве, я прочитал это:

psql возвращает 0 оболочке, если она закончилась нормально, 1, если произошла фатальная ошибка (нехватка памяти, файл не найден), 2, если соединение с сервером разорвалось и сеанс не был интерактивным, и 3, если в скрипте произошла ошибка и была установлена ​​переменная ON_ERROR_STOP.

Чтобы поймать вашу ошибку, вы можете попробовать:

  • установить переменную ON_ERROR_STOP; или
  • изменить подход, сохранив вывод запроса в файл и затем работая с этим файлом.
0 голосов
/ 31 июля 2012

Используйте параметр -o, чтобы записать результаты запроса из psql (терминал командной строки) в файл.
По документации :

-o filename
--output=filename

Put all query output into file filename. This is equivalent to the command \o.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...