Давайте рассмотрим следующий пример (с самого начала сценария psql):
\c :db_to_run_on
TRUNCATE the_most_important_table;
-- tried to avoid similarities to anything that exists out there
Теперь, если это запустится командой
psql [connection details] -v db_to_run_on=\'dev_database\'
тогда он просто запускается, и пользователь счастлив. Но что если он (и) решит уточнить -v db_to_run_on=production_database
? (Предположим, что это может произойти, точно так же, как люди бегут rm -rf / # don't try this at home!!!
случайно). Надеюсь, есть свежая резервная копия этой таблицы ...
Таким образом, возникает вопрос: как проверить переменные, переданные в сценарий, и остановить дальнейшую обработку на основе их значения?
источник
\set ON_ERROR_STOP on
- отлично!PostgreSQL 10
PostgreSQL 10 приносит условные выражения в psql. Это больше не проблема.
Я думаю, вы могли бы также использовать
DO
..источник
\set ON_ERROR_STOP 1
и затем\if yes
\endif
требовать PSQL версии 10 или выше. :) (Ранние версии будут жаловаться\if
на недействительность, а затем выход.)То, что я нашел, работает очень хорошо для меня, это использовать язык сценариев для генерации файла SQL, который я затем передаю в psql, что-то вроде этого:
Затем я вызываю это из скрипта драйвера:
Мой скрипт драйвера обычно является файлом Rake, но вы поняли идею.
источник
Более краткая версия ответа Дезсо:
Вы можете тогда назвать это как:
источник