Подскажите, пожалуйста, следующую вещь. У меня есть скрипт создающий пользователя, базу данных и таблицы этой БД. Скрипт нормально отрабатывает (т.е. удаляет пользователя, существующую БД и создает все заново), но есть момент, который нужно учесть. А именно, когда в одной консоли запускается этот скрипт, а в это же время в системе уже существует соединение с этой БД, то скрипт естественно завершается ошибкой. Этот скрипт должен будет запускаться из приложения на питоне, который должен в зависимости от результатов создания БД выполнить следующее действие. Отсюда вопрос, как получить из sql-скрипта результат того как он отработал, успешно, или с ошибкой и отдать этот результат питону?
Из SQL-скрипта никак, а вот
Из SQL-скрипта никак, а вот от psql такой результат можно получить. Достаточно после вызова psql проанализировать код возврата
echo $?
В том то и дело, что не
В том-то и дело, что не смотря на то что сам скрипт внутри выдал ошибку наружу он возвращает код успешно завершения. Ведь относительно системы он выполнился без сбоев.
Ок. Тогда ещё один вариант,
Ок. Тогда ещё один вариант, правда не очень хороший, но всё-таки вариант:
TMP=`psql < script.sql 2>&1 | grep "ERROR"`;
если в TMP что-то будет значит была ошибка во время выполнения script.sql
Нашел решение
Все оказалось весьма несложно. Дело в том, что мне следовало установить
\set ON_ERROR_STOP ON, после чего выполнение скрипта стало прерываться при вышеописанных условиях и возвращать флаг ошибки.
Ну вот видите - век живи, век
Ну вот видите - век живи, век учись!