Nada de errado em dividi-lo com retrocessos como você mostrou. No entanto, geralmente é melhor enviar o SQL via stdin. Para o postgres, isso é especialmente verdadeiro, já que a opção '-c' é corrigida para retornar a saída de apenas um comando, enquanto que ao aceitar comandos do stdin, você pode empilhar quantos comandos desejar. Então, você faria algo como:
sudo -u postgres /opt/puppet/bin/psql puppetdb -t <<SQL | ...
select certname, r.value as role, e.value as env
from certname_facts r join certname_faces e using (certname)
where r.name = 'role' and e.name = 'env'
order by role,env,certname
SQL
As variáveis de bash podem ser interpoladas aqui. Para evitar isso, cite a primeira instância de SQL
:
sudo -u postgres /opt/puppet/bin/psql puppetdb -t <<'SQL' | ...