sudo não retém a maioria das variáveis de ambiente. Se você quiser especificar variáveis de ambiente para um comando executado em sudo , faça isso embora sudo :
sudo PGPASSWORD="postgres" -u postgres psql -d pg_ldap -w --no-password -h localhost -p 5432 -t -c "SELECT id FROM radusers WHERE id=1"
O fato de sudo permitir ou não isso dependerá da política de segurança em vigor no seu site.
Eu não recomendo essa abordagem, pois ela expõe a senha no histórico da linha de comando e na lista de processos. É muito melhor usar um arquivo .pgpass ou, de preferência, configurar pg_hba.conf para peer autenticação de local conexões do usuário postgres .
Você pode usar um arquivo .pgpass , mas deve ser o .pgpass do usuário com quem você está sudo , e não o usuário que você está sudo ing de ; ele precisaria ser ~postgres/.pgpass neste caso. Pense nisso: psql executado como postgres não sabe que você o executou via sudo da sua conta, ele não sabe qual é a sua conta de usuário e, mesmo que tenha, não tem permissão de leitura como usuário postgres to ~youruser/.pgpass .
Além disso, -w é o mesmo que --no-password . Não faz sentido especificar ambos.