Jeg tror, du skal definere, hvad du forsøger at opnå bedre. Vil du bare vide, om noget lytter på et bestemt punkt? Hvis PostgreSQL lytter på en given port? Hvis PostgreSQL kører og faktisk accepterer forbindelser? Hvis du kan oprette forbindelse til PostgreSQL, skal du godkende og udstede forespørgsler?
En mulighed er at kalde psql
for at oprette forbindelse til den og kontrollere resultatkoden. Forsøg ikke at parse outputteksten, da det er underlagt oversættelse til forskellige sprog.
Bedre, brug klientbiblioteket til det sprog du vælger - psycopg2
for Python, PgJDBC for Java, Pg-perlen for Ruby, DBD::Pg
for Perl, nPgSQL for C# osv. Dette er den fremgangsmåde, jeg vil anbefale. SQLSTATE- eller undtagelsesdetaljerne fra enhver forbindelsesfejl vil fortælle dig mere om, hvorfor forbindelsen mislykkedes - du vil være i stand til at kende forskel på, om serveren ikke lytter, godkendelsesfejl osv. på denne måde. For eksempel i Python:
import psycopg2
try:
conn = psycopg2.connect("host=localhost dbname=postgres")
conn.close()
except psycopg2.OperationalError as ex:
print("Connection failed: {0}".format(ex))
Der er undtagelsesdetaljer i ex.pgcode
(SQLSTATE
) for at fortælle dig mere om fejl, der genereres på serversiden, som f.eks. autentificeringsfejl; den vil være tom for fejl på klientsiden.
Hvis du bare vil se om noget lytter på en given IP- og TCP-port, kan du bruge netcat
(*kun nix), eller et simpelt script på det sprog du vælger, der opretter en socket og laver en connect() og derefter lukker socket, hvis den får et vellykket svar. For eksempel følgende trivielle Python-script:
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))
Den samme tilgang gælder i ethvert programmeringssprog, blot detaljerne i socket-biblioteket og fejlhåndtering varierer.
Til nogle formål kan det også være nyttigt at bruge netstat
værktøj til passivt at liste, hvilke processer der lytter på hvilke netværksstik. Den indbyggede netstat
på Windows er det ret hjernedødt, så du er nødt til at analysere output mere end med netstat
til andre platforme, men det vil stadig gøre arbejdet. Tilstedeværelsen af en socket i netstat
betyder dog ikke, at det vil lykkes at oprette forbindelse til det; hvis processen er fejlet på en eller anden måde, som efterlader den brudt, men stadig kører (fast i en uendelig løkke, blokeret af en debugger, SIGSTOP
ed, osv.), så reagerer den ikke på et faktisk forbindelsesforsøg.