मुझे लगता है कि आपको यह परिभाषित करने की आवश्यकता है कि आप क्या बेहतर हासिल करने की कोशिश कर रहे हैं। क्या आप केवल यह जानना चाहते हैं कि क्या कुछ एक निश्चित बिंदु पर सुन रहा है? अगर PostgreSQL किसी दिए गए पोर्ट पर सुन रहा है? यदि PostgreSQL चल रहा है और वास्तव में कनेक्शन स्वीकार कर रहा है? यदि आप PostgreSQL से जुड़ सकते हैं, सफलतापूर्वक प्रमाणित कर सकते हैं और क्वेरी जारी कर सकते हैं?
एक विकल्प psql
. को इनवाइट करना है इससे कनेक्ट करने और परिणाम कोड की जांच करने के लिए। आउटपुट टेक्स्ट को पार्स करने का प्रयास न करें, क्योंकि यह विभिन्न भाषाओं में अनुवाद के अधीन है।
बेहतर होगा, अपनी पसंद की भाषा के लिए क्लाइंट लाइब्रेरी का उपयोग करें - psycopg2
पायथन के लिए, जावा के लिए PgJDBC, रूबी के लिए Pg रत्न, DBD::Pg
पर्ल के लिए, सी # के लिए एनपीजीएसक्यूएल, आदि। यह वह दृष्टिकोण है जिसे मैं अनुशंसा करता हूं। किसी भी कनेक्शन त्रुटि से SQLSTATE या अपवाद विवरण आपको इस बारे में अधिक बताएगा कि कनेक्शन क्यों विफल हुआ - आप सर्वर के बीच अंतर नहीं सुन पाएंगे, प्रमाणीकरण विफलता, आदि इस तरह से। उदाहरण के लिए, पायथन में:
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
) आपको उन त्रुटियों के बारे में अधिक बताने के लिए जो सर्वर-साइड उत्पन्न होती हैं, जैसे प्रमाणीकरण विफलता; क्लाइंट-साइड त्रुटियों के लिए यह खाली रहेगा।
अगर आप देखना चाहते हैं कि कुछ किसी दिए गए आईपी और टीसीपी पोर्ट पर सुन रहा है, आप netcat
का उपयोग कर सकते हैं (* केवल निक्स), या आपकी पसंद की भाषा में एक साधारण स्क्रिप्ट जो एक सॉकेट बनाता है और एक कनेक्ट () करता है, फिर सॉकेट को बंद कर देता है यदि इसे एक सफल प्रतिक्रिया मिलती है। उदाहरण के लिए, निम्न तुच्छ पायथन लिपि:
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
विंडोज़ पर बहुत दिमागी-मृत है इसलिए आपको netstat
की तुलना में आउटपुट का अधिक विश्लेषण करना होगा अन्य प्लेटफार्मों के लिए, लेकिन यह अभी भी काम करेगा। netstat
. में सॉकेट की उपस्थिति इसका मतलब यह नहीं है कि इससे जुड़ना सफल होगा, हालांकि; अगर प्रक्रिया किसी तरह से विफल हो गई है जो इसे टूटा हुआ छोड़ देता है लेकिन फिर भी चल रहा है (एक अनंत लूप में फंस गया है, एक डीबगर द्वारा अवरुद्ध, SIGSTOP
ed, आदि) तो यह वास्तविक कनेक्शन प्रयास का जवाब नहीं देगा।