postgresql ポートの混乱 5433 または 5432? 質問する

postgresql ポートの混乱 5433 または 5432? 質問する

OSXにpostgresqlをインストールしました。psqlを実行すると、

$ psql
psql: could not connect to server: No such file or directory
    Is the server running locally and accepting
    connections on Unix domain socket "/tmp/.s.PGSQL.5433"?

ただし、/etc/servicesから

postgresql      5432/udp    # PostgreSQL Database
postgresql      5432/tcp    # PostgreSQL Database
#                          Tom Lane <[email protected]>
pyrrho          5433/tcp    # Pyrrho DBMS
pyrrho          5433/udp    # Pyrrho DBMS

5433はピュロンが占め、5432はpgに割り当てられています。

psql -p 5432

しかし、なぜ psql はそれを 5433 と認識するのでしょうか。また、デフォルトで psql が適切な場所を参照するようにするにはどうすればよいでしょうか。

ベストアンサー1

/etc/servicesは単なるアドバイスであり、よく知られているポートの一覧です。そのポートで実際に何かが実行されていることや、指定されたサービスがそのポートで実行されることを意味するものではありません。

PostgreSQL の場合、ポート 5432 が使用可能な場合は、通常このポートを使用します。ポート 5432 が使用可能でない場合、ほとんどのインストーラーは次の空きポート (通常は 5433) を選択します。

このツールを使用すると、実際に何が実行されているかを確認できますnetstat(OS X、Windows、Linux で使用可能で、コマンド ライン構文は 3 つすべてで異なります)。

Mac OS X システムでは、さまざまな PostgreSQL パッケージ (OS に組み込まれている Apple の古いバージョンの PostgreSQL、Postgres.app、Homebrew、Macports、EnterpriseDB インストーラなど) のひどい混乱により、状況はさらに複雑になります。

結局、ユーザーは Pg をインストールしてあるパッケージからサーバーを起動しますが、別のパッケージの とクライアントを使用します。通常、これは Postgres.app または自作の Pg を実行していて、OS に同梱されている に接続しているときに発生しますpsql。これらには異なるデフォルトポートがあるだけでなく、Mac OS X に同梱されている Pg には異なるlibpqpsqlデフォルトの Unix ソケット パスしたがって、サーバーが同じポートで実行されている場合でも、同じ UNIX ソケットをリッスンすることはありません。

ほとんどの Mac ユーザーは、 で tcp/ip を使用するだけでこの問題を回避psql -h localhostできます。必要に応じて、 などのポートを指定することもできます。複数の PostgreSQL インスタンスが稼働している可能性があるため、と をpsql -h localhost -p 5433使用して正しいインスタンスに接続していることを確認してください。select version()SHOW data_directory;

Unix ソケット ディレクトリを指定することもできます。unix_socket_directories接続する PostgreSQL インスタンスの設定を確認し、 で指定します (psql -h例: ) psql -h /tmp

よりクリーンな解決方法は、実際に実行している PostgreSQL に関連付けられていると がで最初に見つかるようPATHにシステムを修正することです。 の詳細は、Mac OS X のバージョンとインストールされている Pg パッケージによって異なります。私は Mac を使用していないので、現在利用可能な時間以上に時間を費やさずにその点についてこれ以上の詳細を提供することはできません。psqllibpqPATH

おすすめ記事