Prenons l'exemple suivant (depuis le début d'un script psql):
\c :db_to_run_on
TRUNCATE the_most_important_table;
-- tried to avoid similarities to anything that exists out there
Maintenant, s'il est exécuté par la commande
psql [connection details] -v db_to_run_on=\'dev_database\'
alors il s'exécute et l'utilisateur est content. Mais que faire s'il décide de préciser -v db_to_run_on=production_database
? (Supposons que cela puisse arriver, tout comme les gens courent rm -rf / # don't try this at home!!!
occasionnellement.) J'espère qu'il y a une nouvelle sauvegarde de cette table ...
La question se pose donc: comment vérifier les variables transmises à un script et arrêter le traitement en fonction de leur valeur?
la source
\set ON_ERROR_STOP on
- agréable!PostgreSQL 10
PostgreSQL 10 apporte des conditions à psql. Ce n'est plus un problème.
Je suppose que vous pourriez également utiliser
DO
..la source
\set ON_ERROR_STOP 1
et ensuite\if yes
\endif
exiger la version 10 ou supérieure de psql. :) (Les versions antérieures se plaindront d'\if
être invalides, puis quitteront.)Ce que j'ai trouvé fonctionne très bien pour moi, c'est d'utiliser un langage de script pour générer un fichier SQL que je dirige ensuite dans psql, quelque chose comme ceci:
Ensuite, j'appelle cela à partir d'un script de pilote:
Mon script de pilote est généralement un fichier Rake, mais vous avez l'idée.
la source
Une version plus concise de la réponse de dezso:
Vous pouvez alors appeler cela comme:
la source