Consideremos el siguiente ejemplo (desde el comienzo de un script psql):
\c :db_to_run_on
TRUNCATE the_most_important_table;
-- tried to avoid similarities to anything that exists out there
Ahora si es ejecutado esto por el comando
psql [connection details] -v db_to_run_on=\'dev_database\'
entonces simplemente se ejecuta y el usuario está contento. Pero, ¿qué pasa si decide especificar -v db_to_run_on=production_database
? (Supongamos que esto puede suceder, al igual que las personas corren rm -rf / # don't try this at home!!!
ocasionalmente.) Esperemos que haya una copia de seguridad nueva de esa tabla ...
Entonces surge la pregunta: ¿cómo verificar las variables pasadas a un script y detener el procesamiento posterior en función de su valor?
fuente
\set ON_ERROR_STOP on
- ¡bonito!PostgreSQL 10
PostgreSQL 10 trae condicionales a psql. Esto ya no es un problema.
Supongo que también podrías usar
DO
...fuente
\set ON_ERROR_STOP 1
y luego\if yes
\endif
requerir psql versión 10 o superior. :) (Las versiones anteriores se quejarán por\if
no ser válidas y luego se cerrarán.)Lo que encontré funciona muy bien para mí es usar un lenguaje de script para generar un archivo SQL que luego canalizo en psql, algo como esto:
Entonces, llamo a esto desde un script de controlador:
Mi script de controlador suele ser un archivo Rake, pero ya se entiende la idea.
fuente
Una versión más concisa de la respuesta de dezso:
Luego puede llamar a esto como:
fuente