Я думаю, вам нужно определить, что вы пытаетесь добиться большего. Хочешь узнать только, если ничего слушает? Если PostgreSQL прослушивает данный порт? Если PostgreSQL работает и фактически принимает соединения? Если вы можете подключиться к PostgreSQL, успешно пройти аутентификацию и выдавать запросы?
Один из вариантов - вызвать psql
для подключения к нему и проверить код результата. Не пытайтесь анализировать выходной текст, поскольку это зависит от перевода на разные языки.
лучше использовать клиентскую библиотеку для языка по вашему выбору - psycopg2
для Python, PgJDBC для Java, камень Pg для Ruby, DBD::Pg
для Perl, nPgSQL для C# и т.д. Это подход, который я бы рекомендовал. Сведения о SQLSTATE или исключении из любой ошибки соединения расскажут вам больше о том, почему соединение не удалось - вы сможете указать разницу между сервером, который не прослушивает, отказ аутентификации и т. Д. Таким образом. Например, в Python:
import psycopg2
try:
conn = psycopg2.connect("host=localhost dbname=postgres")
conn.close();
except psycopg2.OperationalError, ex:
print("Connection failed: {0}".format(ex));
Есть детали исключения в ex.pgcode
(SQLSTATE
), чтобы сказать вам об ошибках that're генерируется на стороне сервера, как неудачи аутентификации; он будет пустым для ошибок на стороне клиента.
Если вы просто хотите увидеть, если что-то прослушивает данный порт 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, ex:
print("Connection failed with errno {0}: {1}".format(ex.errno, ex.strerror))
Такой же подход применяется в любом языке программирования, только детали библиотеки сокетов и обработки ошибок изменяются.
Для некоторых целей также полезно использовать инструмент netstat
, чтобы пассивно перечислить, какие процессы прослушивают сетевые сокеты. Встроенный netstat
на Windows довольно мертв мозг, поэтому вам нужно сделать больше синтаксического анализа вывода, чем с netstat
для других платформ, но он все равно будет выполнять эту работу. Наличие сокета в netstat
не означает, что соединение с ним будет успешным; если процесс потерпел неудачу каким-то образом, что оставит его сломанным, но все еще работает (застрял в бесконечном цикле, заблокированном отладчиком, SIGSTOP
ed и т. д.), то он не будет реагировать на фактическую попытку подключения.
попробуйте подключиться к клиентской библиотеке pg и попытаться войти в систему. если ничего не слушает, или это не PG, вы получите различные ошибки. если это pg и работает, вы, по крайней мере, получите разрешение на отказ/неизвестные пользовательские/любые ошибки. –
@Marc Спасибо за отзыв Марк. Я пытаюсь автоматизировать эту задачу как часть установки Windows. Я рассматриваю возможность написания кода C# для этого. Знаете ли вы о хорошей библиотеке C#, с которой я мог бы попытаться подключиться к postgresql? Кроме того, если вы могли бы подсказать, какие ошибки указывают, что postgresql прослушивает и какие ошибки указывают на другое, это также было бы полезной информацией. – ksun
Я изучаю использование Npgsql – ksun