Betrachten wir das folgende Beispiel (vom Beginn eines psql-Skripts an):
\c :db_to_run_on
TRUNCATE the_most_important_table;
-- tried to avoid similarities to anything that exists out there
Nun, wenn es vom Befehl ausgeführt wird
psql [connection details] -v db_to_run_on=\'dev_database\'
dann läuft es einfach und der Benutzer ist glücklich. Aber was ist, wenn er sich entscheidet zu spezifizieren -v db_to_run_on=production_database
? (Nehmen wir an, dass dies passieren kann, genau wie die Leute rm -rf / # don't try this at home!!!
gelegentlich laufen .) Hoffentlich gibt es eine neue Sicherung dieser Tabelle ...
Es stellt sich also die Frage: Wie können die an ein Skript übergebenen Variablen überprüft und die weitere Verarbeitung basierend auf ihrem Wert gestoppt werden?
quelle
\set ON_ERROR_STOP on
- nett!PostgreSQL 10
PostgreSQL 10 bringt Bedingungen zu psql. Dies ist kein Problem mehr.
Ich denke, Sie könnten auch verwenden
DO
..quelle
\set ON_ERROR_STOP 1
und dann\if yes
\endif
psql Version 10 oder höher benötigen. :) (Frühere Versionen werden sich über\if
die Ungültigkeit beschweren und dann beenden.)Was für mich sehr gut funktioniert, ist die Verwendung einer Skriptsprache, um eine SQL-Datei zu generieren, die ich dann in psql weitergebe.
Dann rufe ich dies aus einem Treiberskript auf:
Mein Treiberskript ist normalerweise eine Rake-Datei, aber Sie haben die Idee.
quelle
Eine präzisere Version von dezsos Antwort:
Sie können dies dann wie folgt nennen:
quelle