次のコマンドを使用して、リモートサーバーにインストールされたpostgresデータベースに接続しようとしています。
psql -h Host_ip
-U db_username
-d db_name
これが発生するエラー:
psql:サーバーに接続できませんでした:接続が拒否されましたサーバーはホスト ""で実行されており、ポート5432でTCP/IP接続を受け入れていますか?
私はすでに次のことを試しましたが、問題は未解決のままです。
pg_hba.conf
ファイルを編集して含めるすべて0.0.0.0/0 md5をすべてホスト
listen_addresses = '*'
nmap
を実行すると、次の出力が得られました。Starting Nmap 6.47 ( http://nmap.org ) at 2015-09-07 18:08 IST Nmap scan report for 10.17.250.250 Host is up (0.0000040s latency). Not shown: 997 closed ports PORT STATE SERVICE 22/tcp open ssh 25/tcp open smtp 80/tcp open http
何か不足していますか。誰かが助けてくれることを願っています。
cd /etc/postgresql/9.x/main/
postgresql.conf
という名前のファイルを開く
Sudo vi postgresql.conf
この行をそのファイルに追加します
listen_addresses = '*'
次に、pg_hba.conf
という名前のファイルを開きます
Sudo vi pg_hba.conf
このファイルにこの行を追加します
Host all all 0.0.0.0/0 md5
暗号化されたパスワードを持つすべてのユーザーのすべてのデータベースへのアクセスを許可します
Sudo /etc/init.d/postgresql restart
postgresql.conf
で定義されているポートを確認します。私のpostgres 9.4のインストールでは、5433
の代わりにポート5432
を使用します
Raspberry Piの新しいPostgreSQLインストールにリモートで接続しようとすると、これに苦労しました。この問題を解決するために私がしたことの完全な内訳は次のとおりです。
まず、PostgreSQL構成ファイルを開き、サービスがローカルホストの外部でリッスンすることを確認します。
Sudo [editor] /etc/postgresql/[version]/main/postgresql.conf
nano
を使用しましたが、選択したエディターを使用できます。バージョン9.1
をインストールしている間、そのディレクトリはインストールしたバージョンに対応します。
「接続と認証」というタイトルのセクションまで検索します。最初の設定は'listen_addresses'
である必要があり、次のようになります。
#listen_addresses = 'localhost' # what IP address(es) to listen on;
右側のコメントは、このフィールドを変更する方法についての適切な指示を示しており、推奨される'*'
をすべて使用するとうまく機能します。
このフィールドは#でコメント化されていることに注意してください。コメントによると、デフォルトは 'localhost'なので、値を'*'
に変更するだけでは不十分です。また、先頭の#
を削除して、設定のコメントを外す必要があります。
次のようになります。
listen_addresses = '*' # what IP address(es) to listen on;
次の設定「ポート」をチェックして、正しく接続されていることを確認することもできます。 5432はデフォルトであり、指定しない場合にpsqlが接続を試みるポートです。
ファイルを保存して閉じ、同じディレクトリにあるクライアント認証設定ファイルを開きます。
Sudo [editor] /etc/postgresql/[version]/main/pg_hba.conf
アクセスを制限したい場合はファイルを読むことをお勧めしますが、基本的なオープン接続の場合は、ファイルの下部にジャンプして次のような行を追加します。
Host all all all md5
必要に応じて、スペースの代わりにTabキーを押して、フィールドと既存の列を並べることができます。
個人的に、代わりに次のような行を追加しました。
Host [database_name] pi 192.168.1.0/24 md5
これにより、接続は1人のユーザーとローカルエリアネットワークサブネット上の1つのデータベースのみに制限されます。
ファイルへの変更を保存したら、サービスを再起動して変更を実装する必要があります。
Sudo service postgresql restart
これで、次のコマンドを使用して、サービスが正しいポートでオープンにリッスンしていることを確認できます。
Sudo netstat -ltpn
(Sudo
を使用して)昇格として実行しない場合、それらのポートでリッスンしているプロセスの名前はわかりません。
プロセスの1つはPostgresである必要があり、ローカルアドレスは開いている(0.0.0.0)必要があり、ローカルトラフィックのみ(127.0.0.1)に制限されていません。開いていない場合は、構成ファイルを再確認して、サービスを再起動する必要があります。サービスが正しいポートでリッスンしていることを再度確認できます(デフォルトは5432
ですが、構成が異なる場合があります)。
最後に、次のコマンドを使用して、リモートコンピューターから正常に接続できます。
psql -h [server ip address] -p [port number, optional if 5432] -U [postgres user name] [database name]
設定が構成ファイルに正しく適用されていることを確認してください。
vim /etc/postgresql/x.x/main/postgresql.conf
以下を試してログを確認し、問題を見つけてください。
tail /var/log/postgresql/postgresql-x.x-main.log
私の場合、管理ポータルでAzureのデフォルトセキュリティポリシーを変更しませんでした。元のポートは許可されたポート22であり、残りはすべて拒否されます。 5432ポートを追加する限り、すべてが正常になります。
ホストのIPではなくmachine-nameを使用していると思います。
マシンの名前で試したときに同じエラーが発生しました。なぜなら、クライアントとホストの両方が同じネットワークの下にあり、同じオペレーティングシステムがインストールされている場合にのみ許可されます。
以下はmacos Mojaveで私を助けてくれました:
$Sudo mv /usr/local/var/postgres /usr/local/var/postgres.save
$brew uninstall postgres
$brew install postgres
構成ファイルが正しく、まったく同じ問題が発生しました。私の場合、問題は私が使用したEduroam wifiに由来します。別のwifi経由で接続すると、すべてが機能します。少なくとも私の大学では、Eduroamがポート5432をブロックしているようです。