Мисля, че трябва да дефинирате по-добре какво се опитвате да постигнете. Искате ли просто да знаете дали нещо слуша ли в определена точка? Ако PostgreSQL слуша ли на даден порт? Ако PostgreSQL работи и действително приема връзки? Ако можете да се свържете с PostgreSQL, удостоверяване успешно и изпращане на заявки?
Една от опциите е да извикате psql
за да се свържете с него и да проверите кода на резултата. Не се опитвайте да анализирате изходния текст, тъй като той подлежи на превод на различни езици.
По-добре използвайте клиентската библиотека за езика по ваш избор - psycopg2
за Python, PgJDBC за Java, Pg gem за Ruby, DBD::Pg
за Perl, nPgSQL за C# и т.н. Това е подходът, който бих препоръчал. SQLSTATE или подробностите за изключение от всяка грешка при свързване ще ви кажат повече за това защо връзката е неуспешна - по този начин ще можете да разберете разликата между сървъра, който не слуша, грешка при удостоверяване и т.н. Например в Python:
import psycopg2
try:
conn = psycopg2.connect("host=localhost dbname=postgres")
conn.close()
except psycopg2.OperationalError as ex:
print("Connection failed: {0}".format(ex))
Има подробности за изключението в ex.pgcode
(SQLSTATE
), за да ви кажем повече за грешките, които се генерират от страната на сървъра, като грешки при удостоверяване; ще бъде празно за грешки от страна на клиента.
Ако просто искате да видите дали нещо слуша на даден IP и TCP порт, можете да използвате netcat
(*nix само) или прост скрипт на езика по ваш избор, който създава сокет и прави connect(), след което затваря сокета, ако получи успешен отговор. Например следният тривиален скрипт на 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))
Същият подход се прилага във всеки език за програмиране, само подробностите за библиотеката на сокетите и обработката на грешки варират.
За някои цели също може да бъде полезно да използвате netstat
инструмент за пасивно изброяване кои процеси слушат кои мрежови сокети. Вграденият netstat
на Windows е доста умствено мъртъв, така че трябва да правите повече синтактичен анализ на изхода, отколкото с netstat
за други платформи, но пак ще свърши работа. Наличието на сокет в netstat
не означава обаче, че свързването с него ще успее; ако процесът е неуспешен по някакъв начин, който го оставя повреден, но все още работи (заседнал в безкраен цикъл, блокиран от програма за отстраняване на грешки, SIGSTOP
ed и т.н.), тогава той няма да отговори на действителен опит за свързване.