Eu acho que você precisa definir o que você está tentando alcançar melhor. Você só quer saber se alguma coisa está ouvindo em um determinado ponto? Se PostgreSQL está escutando em uma determinada porta? Se o PostgreSQL está rodando e realmente aceitando conexões? Se você pode se conectar ao PostgreSQL, autenticar com sucesso e emitir consultas?
Uma opção é invocar
psql
para se conectar a ele e verifique o código de resultado. Não tente analisar o texto de saída, pois ele está sujeito a tradução para diferentes idiomas. Melhor, use a biblioteca cliente para o idioma de sua escolha -
psycopg2
para Python, PgJDBC para Java, a gem Pg para Ruby, DBD::Pg
para Perl, nPgSQL para C#, etc. Esta é a abordagem que eu recomendo. O SQLSTATE ou detalhes de exceção de qualquer erro de conexão lhe dirão mais sobre por que a conexão falhou - você poderá dizer a diferença entre o servidor não escutando, falha de autenticação, etc. Por exemplo, em Python:import psycopg2
try:
conn = psycopg2.connect("host=localhost dbname=postgres")
conn.close()
except psycopg2.OperationalError as ex:
print("Connection failed: {0}".format(ex))
Existem detalhes de exceção em
ex.pgcode
(o SQLSTATE
) para informar mais sobre erros gerados no lado do servidor, como falhas de autenticação; ele estará vazio para erros do lado do cliente. Se você quiser apenas ver se algo está escutando em uma determinada porta IP e TCP, você pode usar
netcat
(*nix apenas), ou um script simples no idioma de sua escolha que cria um soquete e faz um connect() e fecha o soquete se obtiver uma resposta bem-sucedida. Por exemplo, o seguinte script Python trivial:import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
s.connect(('localhost',5432))
s.close()
except socket.error as ex:
print("Connection failed with errno {0}: {1}".format(ex.errno, ex.strerror))
A mesma abordagem se aplica a qualquer linguagem de programação, apenas os detalhes da biblioteca de soquetes e o tratamento de erros variam.
Para alguns propósitos também pode ser útil usar o
netstat
ferramenta para listar passivamente quais processos estão escutando em quais soquetes de rede. O netstat
integrado no Windows está com morte cerebral, então você tem que fazer mais análise da saída do que com netstat
para outras plataformas, mas ainda fará o trabalho. A presença de um soquete em netstat
não significa que a conexão com ele será bem-sucedida; se o processo falhou de alguma forma que o deixa quebrado, mas ainda em execução (preso em um loop infinito, bloqueado por um depurador, SIGSTOP
ed, etc), então ele não responderá a uma tentativa de conexão real.