PostgreSQL 9.5 のサーバーがデフォルトの 5432 番ポートで動いている状態で、PostgreSQL 9.6 のサーバーをインストールするとどうなるか。
$ apt-get install postgresql-9.6
結果。PostgreSQL 9.6 の main
クラスタが 5433 番ポートで立ち上がる。
この状態で psql
コマンドのバージョンを調べると、9.5.4
のように古いバージョン番号が報告される。
なぜか。
実は、psql
、pg_dump
、pg_restore
、pg_basebackup
などのコマンドは /usr/share/postgresql-common/pg_wrapper
へのリンクとなっていて、この pg_wrapper
がさらに適切なバージョンの「本物」のコマンドを実行する、という仕組みになっているからである。
PostgreSQL 9.6 用の「本物」の psql
は /usr/lib/postgresql/9.6/bin
にある。
pg_wrapper
が「本物」のコマンドを選択する方法については、man pg_wrapper
に書いてある。その仕組みはかなり複雑だが、私たちが特に何もしていない場合、デフォルトの 5432 番ポートを listen している PostgreSQL サーバーのバージョンを使うことになる。つまり、現状では 9.5 だ。
ここで、PostgreSQL 9.5 をアンインストールしてみよう。
apt-get remove postgresql-9.5
5432 番を listen している PostgreSQL サーバーは停止されて、PostgreSQL 9.5 のプログラムは除去される。
そして psql --version
を実行すると、次のようなエラーメッセージが出る。
Error: No existing local cluster is suitable as a default target. Please see man pg_wrapper(1) how to specify one.
5432 番を listen している PostgreSQL サーバーが存在しないからだ。
しかし、psql --port=5433 --version
というコマンドを実行すれば、正しく 9.6.2
という結果を返す。
だから、さきほどのエラーメッセージについては気にしなくてもいい。
もし気になるのであれば、いくつか回避方法がある。
- 環境変数
PGPORT
に5433
をセットする。 /etc/postgresql/9.6/main/postgresql.conf
のport
属性の値を5432
に変更して、PostgreSQL サーバーを再起動する。