Czy istnieje sposób na określenie, że podczas wykonywania skryptu sql zatrzymuje się podczas napotkania pierwszego błędu w skrypcie, zwykle trwa, niezależnie od poprzednich błędów.Błąd PostgreSQL na błędzie skryptu
Dzięki
Czy istnieje sposób na określenie, że podczas wykonywania skryptu sql zatrzymuje się podczas napotkania pierwszego błędu w skrypcie, zwykle trwa, niezależnie od poprzednich błędów.Błąd PostgreSQL na błędzie skryptu
Dzięki
to nie jest dokładnie to, co chcesz, ale jeśli uruchomić skrypt z begin transaction;
i kończą end transaction;
, to faktycznie pominąć wszystko po pierwszym błędzie, a następnie będzie ona ROLLBACK wszystko to miało miejsce przed błędem .
Zakładam, że używasz psql
, może to być przydatne, aby dodać do Twojego pliku ~/.psqlrc
.
\set ON_ERROR_STOP on
Spowoduje to przerwanie pierwszego błędu. Jeśli go nie posiadasz, nawet przy transakcji będzie on nadal wykonywał twój skrypt, ale wszystko zawiedzie do końca skryptu.
Prawdopodobnie chcesz skorzystać z transakcji, jak powiedział Paul. Co również można zrobić z psql --single-transaction ...
, jeśli nie chcesz zmienić skryptu.
Więc kompletny przykład, z ON_ERROR_STOP w swojej .psqlrc:
psql --single-transaction --file /your/script.sql
Nawet jeśli transakcja się nie powiedzie, status wyjścia komendy psql nadal wynosi 0. –
Rzeczywiście, nawet jeśli użyta jest '--jeden-transakcja', to' -v ON_ERROR_STOP = 1' jest nadal konieczne dla niezerowego statusu istniejącego – bitek
Myślę, że rozwiązanie, aby dodać następujące do .psqlrc jest daleki od doskonałości
\set ON_ERROR_STOP on
istnieje wiele bardziej proste i wygodny sposób - użyj psql z parametrem:
psql -v ON_ERROR_STOP=1
lepiej użyć również -X
parametr wyłączający użycie pliku .psqlrc. Działa doskonale dla mnie
p.s. rozwiązanie znalezione w świetnym poście od Petera Eisentrauta. Dziękuję, Peter! http://petereisentraut.blogspot.com/2010/03/running-sql-scripts-with-psql.html
'-v ON_ERROR_STOP = ON 'działa również, przynajmniej z 9.2. Podejrzewam, że dowolny z [wariantów boolowskiego "true"] (http://www.postgresql.org/docs/9.2/static/datatype-boolean.html) jest dozwolony. – jpmc26
Nie działa w trybie interaktywnym, co dezorientowało mnie przez chwilę. –
Dzięki, dodawanie -v ON_ERROR_STOP = 1 -x działa dla mnie. – netto
To prawda, ale nadal wszystko analizuje. A jeśli chcesz zrobić * sekundową * transakcję tylko wtedy, gdy pierwsza się powiedzie, to nie zadziała. – Wildcard