PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Sprawdź, czy Postgresql nasłuchuje

Myślę, że musisz zdefiniować, co chcesz osiągnąć lepiej. Czy chcesz tylko wiedzieć, czy coś słucha w pewnym momencie? Jeśli PostgreSQL nasłuchuje na danym porcie? Czy PostgreSQL działa i faktycznie akceptuje połączenia? Czy możesz połączyć się z PostgreSQL, pomyślnie uwierzytelnić się i wysyłać zapytania?

Jedną z opcji jest wywołanie psql połączyć się z nim i sprawdzić kod wynikowy. Nie próbuj analizować tekstu wyjściowego, ponieważ podlega on tłumaczeniu na różne języki.

Lepiej użyj biblioteki klienta dla wybranego języka - psycopg2 dla Pythona, PgJDBC dla Javy, klejnot Pg dla Rubiego, DBD::Pg dla Perla, nPgSQL dla C# itp. Jest to podejście, które polecam. Szczegóły SQLSTATE lub wyjątku z dowolnego błędu połączenia powiedzą Ci więcej o przyczynie niepowodzenia połączenia — w ten sposób będziesz w stanie odróżnić serwer, który nie nasłuchuje, awaria uwierzytelnienia itp. Na przykład w Pythonie:

import psycopg2
try:
    conn = psycopg2.connect("host=localhost dbname=postgres")
    conn.close()
except psycopg2.OperationalError as ex:
    print("Connection failed: {0}".format(ex))

Istnieją szczegóły wyjątku w ex.pgcode (SQLSTATE ), aby dowiedzieć się więcej o błędach generowanych po stronie serwera, takich jak błędy uwierzytelniania; będzie pusty w przypadku błędów po stronie klienta.

Jeśli chcesz tylko zobaczyć, czy coś nasłuchuje na podanym porcie IP i TCP, możesz użyć netcat (tylko *nix) lub prosty skrypt w wybranym języku, który tworzy gniazdo i wykonuje funkcję connect(), a następnie zamyka gniazdo, jeśli otrzyma pomyślną odpowiedź. Na przykład następujący trywialny skrypt Pythona:

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))            

To samo podejście ma zastosowanie w każdym języku programowania, różnią się tylko szczegóły biblioteki gniazd i obsługi błędów.

Do niektórych celów przydatne może być również użycie netstat narzędzie do pasywnego wyświetlania, które procesy nasłuchują na których gniazdach sieciowych. Wbudowany netstat w systemie Windows jest dość martwy, więc musisz zrobić więcej analizowania danych wyjściowych niż w przypadku netstat dla innych platform, ale nadal będzie działać. Obecność gniazda w netstat nie oznacza jednak, że połączenie się z nim powiedzie się; jeśli proces zawiódł w jakiś sposób, który pozostawia go uszkodzony, ale nadal działa (utknął w nieskończonej pętli, zablokowany przez debugger, SIGSTOP ed, itp.), to nie zareaguje na faktyczną próbę połączenia.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jaka jest domyślna nazwa ograniczenia w PostgreSQL?

  2. PostgreSQL date() ze strefą czasową

  3. Funkcja DATE ADD w PostgreSQL

  4. Jak zmienić kolumnę PG na NULLABLE TRUE?

  5. 100% wykorzystanie procesora spowodowane przez nieznane zapytanie postgres