Czy istnieje sposób, aby określić, że podczas wykonywania skryptu sql zatrzymuje się po napotkaniu pierwszego błędu w skrypcie, zwykle kontynuuje, niezależnie od poprzednich błędów.
postgresql
Promień
źródło
źródło
-v ON_ERROR_STOP=ON
działa również, przynajmniej z 9.2. Podejrzewam, że każdy z wariantów wartości logicznej „prawda” jest dozwolony.Zakładam, że używasz
psql
, może to być przydatne do dodania do~/.psqlrc
pliku.Spowoduje to przerwanie pracy przy pierwszym błędzie. Jeśli go nie masz, nawet przy transakcji będzie wykonywał twój skrypt, ale zakończy się niepowodzeniem do końca skryptu.
I prawdopodobnie chcesz skorzystać z transakcji, jak powiedział Paul. Co również można zrobić,
psql --single-transaction ...
jeśli nie chcesz zmieniać skryptu.A więc kompletny przykład, z ON_ERROR_STOP w twoim .psqlrc:
źródło
--single-transaction
jest używany,-v ON_ERROR_STOP=1
nadal jest niezbędny dla statusu istnienia niezerowegoNie jest to dokładnie to, czego chcesz, ale jeśli zaczniesz swój skrypt od
begin transaction;
i zakończyszend transaction;
, w rzeczywistości pominie on wszystko po pierwszym błędzie, a następnie wycofa wszystko, co zrobił przed błędem.źródło
Zawsze lubię odwoływać się bezpośrednio do instrukcji.
Z podręcznika PostgreSQL :
Domyślnie, jeśli kod sql uruchamiany na serwerze PostgreSQL błąd psql nie zamyka błędu. Wychwyci błąd i będzie kontynuował. Jeśli, jak wspomniano powyżej, ustawisz to
ON_ERROR_STOP
ustawienie na włączone, kiedy psql wykryje błąd w kodzie sql, zakończy działanie i powróci3
do powłoki.źródło