sql >> Database >  >> RDS >> PostgreSQL

Controleer of Postgresql luistert

Ik denk dat je beter moet definiëren wat je probeert te bereiken. Wil je gewoon weten of iets luistert op een bepaald punt? Als PostgreSQL luistert op een bepaalde poort? Als PostgreSQL actief is en daadwerkelijk verbindingen accepteert? Als u verbinding kunt maken met PostgreSQL, met succes kunt authenticeren en vragen kunt stellen?

Een optie is om psql . aan te roepen om er verbinding mee te maken en de resultaatcode te controleren. Probeer de uitvoertekst niet te ontleden, want die is onderhevig aan vertaling in verschillende talen.

Gebruik de clientbibliotheek beter voor de taal van uw keuze - psycopg2 voor Python, PgJDBC voor Java, de Pg-edelsteen voor Ruby, DBD::Pg voor Perl, nPgSQL voor C#, enz. Dit is de aanpak die ik zou aanraden. De SQLSTATE- of uitzonderingsdetails van een verbindingsfout zullen u meer vertellen over waarom de verbinding is mislukt - u kunt op deze manier het verschil zien tussen de server die niet luistert, authenticatiefout, enz. Bijvoorbeeld in Python:

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

Er zijn uitzonderingsdetails in ex.pgcode (de SQLSTATE ) om u meer te vertellen over fouten die aan de serverzijde worden gegenereerd, zoals verificatiefouten; het is leeg voor fouten aan de clientzijde.

Als je gewoon wilt zien of iets luistert op een bepaalde IP- en TCP-poort, kunt u netcat . gebruiken (alleen *nix), of een eenvoudig script in de taal van uw keuze dat een socket maakt en een connect() doet en vervolgens de socket sluit als het een succesvol antwoord krijgt. Bijvoorbeeld het volgende triviale Python-script:

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

Dezelfde aanpak is van toepassing in elke programmeertaal, alleen de details van de socketbibliotheek en foutafhandeling variëren.

Voor sommige doeleinden kan het ook handig zijn om de netstat . te gebruiken tool om passief te vermelden welke processen op welke netwerksockets luisteren. De ingebouwde netstat op Windows is behoorlijk hersendood, dus je moet de uitvoer meer ontleden dan met netstat voor andere platforms, maar het zal nog steeds het werk doen. De aanwezigheid van een socket in netstat betekent echter niet dat het zal lukken om er verbinding mee te maken; als het proces op de een of andere manier is mislukt waardoor het kapot is maar nog steeds actief is (vastgelopen in een oneindige lus, geblokkeerd door een debugger, SIGSTOP ed, etc) dan zal het niet reageren op een daadwerkelijke verbindingspoging.



  1. PHP-kalender met terugkerende evenementen uit de MySQL-database

  2. X uur toevoegen - @Query - Spring Data JPA

  3. ElasticSearch-indexstructuur instellen met bindingen met meerdere entiteiten

  4. ORA-21700:object bestaat niet of is gemarkeerd voor verwijdering voor Associative Array als invoerparameter aangeroepen vanuit ODP.NET