Myslím, že musíte lépe definovat, čeho se snažíte dosáhnout. Chcete jen vědět, jestli něco poslouchá v určitém bodě? Pokud PostgreSQL poslouchá na daném portu? Pokud PostgreSQL běží a skutečně přijímá připojení? Pokud se můžete připojit k PostgreSQL, úspěšně se autentizovat a zadávat dotazy?
Jednou z možností je vyvolat psql
připojte se k němu a zkontrolujte výsledný kód. Nepokoušejte se analyzovat výstupní text, protože to podléhá překladu do různých jazyků.
Lepší je použít klientskou knihovnu pro jazyk podle vašeho výběru - psycopg2
pro Python, PgJDBC pro Javu, klenot Pg pro Ruby, DBD::Pg
pro Perl, nPgSQL pro C# atd. Toto je přístup, který bych doporučil. SQLSTATE nebo podrobnosti o výjimce z jakékoli chyby připojení vám řeknou více o tom, proč se připojení nezdařilo - tímto způsobem budete schopni rozpoznat rozdíl mezi tím, že server nenaslouchá, selháním ověřování atd. Například v Pythonu:
import psycopg2
try:
conn = psycopg2.connect("host=localhost dbname=postgres")
conn.close()
except psycopg2.OperationalError as ex:
print("Connection failed: {0}".format(ex))
Podrobnosti o výjimce jsou v ex.pgcode
(SQLSTATE
), abychom vám řekli více o chybách, které se generují na straně serveru, jako jsou selhání ověřování; pro chyby na straně klienta bude prázdný.
Pokud se chcete jen podívat, něco naslouchá na daném IP a TCP portu, můžete použít netcat
(pouze *nix), nebo jednoduchý skript v jazyce dle vašeho výběru, který vytvoří soket a provede connect() a poté soket zavře, pokud dostane úspěšnou odpověď. Například následující triviální skript 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))
Stejný přístup platí v jakémkoli programovacím jazyce, jen podrobnosti o knihovně soketů a zpracování chyb se liší.
Pro některé účely může být také užitečné použít netstat
nástroj pro pasivní výpis, které procesy naslouchají na kterých síťových zásuvkách. Vestavěný netstat
ve Windows je dost mrtvé, takže musíte udělat více analýzy výstupu než pomocí netstat
pro jiné platformy, ale stále to bude fungovat. Přítomnost soketu v netstat
neznamená to však, že připojení k němu bude úspěšné; pokud proces nějakým způsobem selhal, takže je přerušený, ale stále běží (uvízl v nekonečné smyčce, blokován debuggerem, SIGSTOP
ed atd.), pak nebude reagovat na skutečný pokus o připojení.