ソースからビルドした後、PostgreSQL インスタンスをインストールしようとしていますが、postmaster
データベース クラスターを起動する前にデーモンを実行してもうまくいかないようです。起動時に表示されたエラー メッセージは次のとおりです。
postgres@Home:~$ /usr/local/pgsql/bin/postmaster -D /usr/local/pgsql/data
LOG: could not bind IPv4 socket: Address already in use
HINT: Is another postmaster already running on port 5432? If not, wait a few seconds
and retry.
WARNING: could not create listen socket for "localhost"
FATAL: could not create any TCP/IP sockets
グーグルで検索した結果、ヒントになる唯一の結果は、次のコマンドを実行するように指示するものでした。出力は次のようになります。
postgres@Home:~$ lsof -i :5432
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
postgres 1169 postgres 3u IPv4 1998 0t0 TCP localhost:postgresql (LISTEN)
postgres@Home:~$ netstat -an|grep :5432
tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN
つまり、デーモンがラッチしようとしているポートの接続はpostmaster
、実際には利用可能であると考えられます。原因について何か考えはありますか?
ご興味があれば、私は pgsql 9.2.3 を実行しています。(また、この質問をするのに Stack Exchange サイトが間違っている場合は、Stack Overflow または Programmers に移動してください。)
答え1
postmaster
起動失敗時のエラーメッセージとnetstat
出力には、TCPポートを使用するプロセスがすでに存在していることが示されています5432
。おそらく、システムの一部としてPostgreSQLがすでにインストールされているのでしょう。PostgreSQL 9.1 の場合パッケージがインストールされ、 の出力が表示されますpg_lsclusters
。
独自にコンパイルした PostgreSQL を、Ubuntu 用にパッケージ化されたものと並行して実行したい場合は、port
の設定エントリを変更する必要があります/usr/local/pgsql/data/postgresql.conf
。
一方、自分でコンパイルしたPostgreSQLだけをデフォルトのポートで実行したい場合は5432
、Ubuntuパッケージを削除するか、以下の編集により起動時にクラスタを無効にすることができます。/etc/postgresql/9.1/main/start.conf