私はあなたがより良く達成しようとしていることを定義する必要があると思います。 何かかどうかだけ知りたいですか ある時点で聞いていますか? PostgreSQLの場合 特定のポートでリッスンしていますか? PostgreSQLが実行されていて、実際に接続を受け入れている場合はどうなりますか? PostgreSQLに接続できる場合は、認証に成功し、クエリを発行しますか?
1つのオプションは、psql
を呼び出すことです。 接続して結果コードを確認します。異なる言語に翻訳される可能性があるため、出力テキストを解析しようとしないでください。
選択した言語のクライアントライブラリを使用することをお勧めします-psycopg2
Pythonの場合はPgJDBC、Javaの場合はPgJDBC、Rubyの場合はPg gem、DBD::Pg
Perlの場合、C#の場合はnPgSQLなど。これは私がお勧めするアプローチです。 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など)、実際の接続試行には応答しません。