Rozważmy następujący przykład (od początku skryptu psql):
\c :db_to_run_on
TRUNCATE the_most_important_table;
-- tried to avoid similarities to anything that exists out there
Teraz, jeśli jest to uruchomione przez polecenie
psql [connection details] -v db_to_run_on=\'dev_database\'
to po prostu działa i użytkownik jest zadowolony. Ale co jeśli zdecyduje się określić -v db_to_run_on=production_database
? (Załóżmy, że może się to zdarzyć, tak jak ludzie biegają rm -rf / # don't try this at home!!!
okazjonalnie.) Mam nadzieję, że istnieje nowa kopia zapasowa tego stołu ...
Powstaje więc pytanie: jak sprawdzić zmienne przekazane do skryptu i zatrzymać dalsze przetwarzanie na podstawie ich wartości?
źródło
\set ON_ERROR_STOP on
- miły!PostgreSQL 10
PostgreSQL 10 dostarcza warunkowe do psql. To już nie jest problem.
Myślę, że możesz też użyć
DO
...źródło
\set ON_ERROR_STOP 1
a następnie\if yes
\endif
wymagać psql w wersji 10 lub wyższej. :) (Wcześniejsze wersje będą narzekać na to, że\if
są nieprawidłowe, a następnie rezygnują).To, co znalazłem, działa dla mnie bardzo dobrze, to użyć języka skryptowego do wygenerowania pliku SQL, który następnie przesyłam do psql, mniej więcej tak:
Następnie wywołuję to ze skryptu sterownika:
Mój skrypt sterownika jest zwykle plikiem Rake, ale masz pomysł.
źródło
Bardziej zwięzła wersja odpowiedzi dezso:
Następnie możesz nazwać to tak:
źródło