PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Verifique se o Postgresql está escutando


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.