Se você quiser que seu script execute todos os comandos, desconsiderando qualquer falha, remova os dois -e
flags.
Por outro lado, se você ainda quer terminar o script em caso de erro, mas quer pegar um específico (PostgreSQL no seu caso), deixe apenas um dos -e
flags, não importa qual, mas um preferência pessoal está no script não no shebang, e o caminho para pegar o erro é adicionar um ||
(OR lógico) ao final do comando saindo com não 0. O que isso ||
fazer é se o anterior código de saída do comando não é 0 execute o seguinte:
psql -h $DB_HOST -U $DB_USER -c "delete from reports.$table_name where fecha < '$max_date'" || true
O exemplo acima irá capturar silenciosamente psql
non 0 códigos de saída e continuar, você pode substituir o comando true
por qualquer coisa que você queira (registre o erro, espere algum tempo, etc ...) com 0 ou você terminará na mesma situação. O comando true
não faz absolutamente nada, apenas sai com o código 0.