sql >> Base de Datos >  >> RDS >> PostgreSQL

Comprobar si Postgresql está escuchando

Creo que necesitas definir mejor lo que estás tratando de lograr. ¿Quiere saber si algo está escuchando en un punto determinado? Si PostgreSQL está escuchando en un puerto determinado? ¿Si PostgreSQL se está ejecutando y acepta conexiones? Si puede conectarse a PostgreSQL, autenticarse correctamente y emitir consultas.

Una opción es invocar psql para conectarse a él y verificar el código de resultado. No intente analizar el texto de salida, ya que está sujeto a traducción a diferentes idiomas.

Mejor, use la biblioteca del cliente para el idioma de su elección:psycopg2 para Python, PgJDBC para Java, la gema Pg para Ruby, DBD::Pg para Perl, nPgSQL para C#, etc. Este es el enfoque que recomendaría. El SQLSTATE o los detalles de excepción de cualquier error de conexión le darán más información sobre por qué falló la conexión:podrá diferenciar entre el servidor que no escucha, la falla de autenticación, etc. de esta manera. Por ejemplo, en Python:

import psycopg2
try:
    conn = psycopg2.connect("host=localhost dbname=postgres")
    conn.close()
except psycopg2.OperationalError as ex:
    print("Connection failed: {0}".format(ex))

Hay detalles de excepción en ex.pgcode (el SQLSTATE ) para brindarle más información sobre los errores que se generan en el lado del servidor, como fallas de autenticación; estará vacío para errores del lado del cliente.

Si solo quieres ver si algo está escuchando en un puerto IP y TCP determinado, puede usar netcat (*solo nix), o una secuencia de comandos simple en el idioma de su elección que crea un socket y realiza una conexión () y luego cierra el socket si obtiene una respuesta exitosa. Por ejemplo, el siguiente script trivial de Python:

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))            

El mismo enfoque se aplica en cualquier lenguaje de programación, solo varían los detalles de la biblioteca de sockets y el manejo de errores.

Para algunos propósitos, también puede ser útil usar netstat herramienta para enumerar pasivamente qué procesos están escuchando en qué sockets de red. El netstat incorporado en Windows es bastante tonto, por lo que debe analizar más la salida que con netstat para otras plataformas, pero seguirá funcionando. La presencia de un socket en netstat Sin embargo, no significa que conectarse a él tendrá éxito; si el proceso ha fallado de alguna manera que lo deja roto pero aún en ejecución (atascado en un bucle infinito, bloqueado por un depurador, SIGSTOP ed, etc), entonces no responderá a un intento de conexión real.