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.