PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Проверете дали Postgresql слуша

Мисля, че трябва да дефинирате по-добре какво се опитвате да постигнете. Искате ли просто да знаете дали нещо слуша ли в определена точка? Ако 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 и т.н.), тогава той няма да отговори на действителен опит за свързване.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Намиране на обхващаща гора (С RECURSIVE, PostgreSQL 9.5)

  2. Сложна заявка на Postgres

  3. Lumen - Създаване на връзка с базата данни по време на изпълнение

  4. Вариации в производителността на заявките в PostgreSQL LIKE

  5. PostgreSQL - Потребителят на DB трябва да има право само да извиква функции