Vamos considerar o seguinte exemplo (desde o início de um script psql):
\c :db_to_run_on
TRUNCATE the_most_important_table;
-- tried to avoid similarities to anything that exists out there
Agora, se for executado isso pelo comando
psql [connection details] -v db_to_run_on=\'dev_database\'
então ele é executado e o usuário fica feliz. Mas e se ele decidir especificar -v db_to_run_on=production_database
? (Vamos supor que isso possa acontecer, assim como as pessoas correm rm -rf / # don't try this at home!!!
ocasionalmente.) Espero que haja um novo backup dessa tabela ...
Portanto, surge a pergunta: como verificar as variáveis passadas para um script e interromper o processamento com base em seu valor?
fonte
\set ON_ERROR_STOP on
- agradável!PostgreSQL 10
O PostgreSQL 10 traz condicionais para o psql. Isso não é mais um problema.
Eu acho que você também pode usar
DO
..fonte
\set ON_ERROR_STOP 1
e, em seguida,\if yes
\endif
para exigir versão psql 10 ou superior. :) (As versões anteriores reclamam por\if
serem inválidas e, em seguida, são encerradas.) #O que eu descobri que funciona muito bem para mim é usar uma linguagem de script para gerar um arquivo SQL que, em seguida, canalizo para o psql, algo como isto:
Então, eu chamo isso de um script de driver:
Meu script de driver geralmente é um arquivo Rake, mas você entendeu.
fonte
Uma versão mais concisa da resposta de dezso:
Você pode chamar assim:
fonte