1. ホーム
  2. postgresql

[解決済み] postgresqlのポートの混乱 5433 or 5432?

2022-03-08 22:38:57

質問

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はpyrrhoが占有しており、5432はpgに割り当てられている。 と接続できる。

psql -p 5432

が、なぜpsqlは5433だと思うのか、psqlがデフォルトで正しい場所を見るようにするにはどうすればいいのか?

解決方法は?

/etc/services はあくまでも助言であり、よく知られたポートのリストです。実際にそのポートで何かが動いているわけでも、名前のついたサービスがそのポートで動くというわけでもありません。

PostgreSQLの場合、ポート5432が利用可能であれば、それを使用するのが一般的です。もし利用できない場合、ほとんどのインストーラは次に空いているポート、通常は5433を選択します。

実際に何が動いているかは netstat ツール(OS X、Windows、Linuxで利用可能で、コマンドラインの構文は3つとも異なる)を使用します。

Mac OS X システムでは、OS に組み込まれた Apple の古いバージョンの PostgreSQL、Postgres.app、Homebrew、Macports、EnterpriseDB インストーラなど、さまざまな PostgreSQL パッケージが乱立しており、さらに複雑になっています。

結局のところ、ユーザーはあるパッケージングからPgをインストールし、サーバーを起動しますが psqllibpq クライアントを別のパッケージからインストールする必要があります。典型的な例としては、Postgres.app や自作 Pg を実行している時に psql OSに同梱されているものです。これらはデフォルトのポートが異なることがあるだけでなく、Mac OS X に同梱された Pg は、そのポートが異なる デフォルトのUnixソケットパス そのため、サーバーが同じポートで動作していても、同じunixソケットをリッスンしているとは限りません。

ほとんどのMacユーザーは、この問題を回避するために、tcp/ipに psql -h localhost . 必要であれば、ポートを指定することもできます。 psql -h localhost -p 5433 . 複数のPostgreSQLインスタンスが動作している可能性があるので、正しいインスタンスに接続するために select version()SHOW data_directory; .

また、unix ソケット・ディレクトリを指定することもできます。 unix_socket_directories の設定で、接続したいPostgreSQLインスタンスの psql -h は、例えば psql -h /tmp .

よりクリーンな解決策は、システムを修正することです PATH というように psqllibpq 実際に実行しているPostgreSQLに関連するものは、最初に PATH . その詳細は、お使いの Mac OS X のバージョンとインストールされている Pg パッケージに依存します。私はMacを使用していないので、現在利用可能な時間より多くの時間を費やすことなく、その側面についてより多くの詳細を提供することはできません。