1. 概要
いつものように ports の更新を確認しておりましたらば…。
php5-pgsql-5.4.41 < needs updating (index has 5.4.42)
アップデートしようとしましたら…。
$ portupgrade -vRr php5-pgsql
---> Session started at: Wed, 17 Jun 2015 22:53:22 +0900
[Reading data from pkg(8) ... - 200 packages found - done]
** Port marked as IGNORE: databases/php5-pgsql:
cannot install: unknown PostgreSQL version: 8.4
~ 後 略 ~
ん?何これ。「cannot install: unknown PostgreSQL version: 8.4」って?
$ pkg version -vl "?"
postgresql84-client-8.4.22_1 ? orphaned: databases/postgresql84-client
postgresql84-server-8.4.22_2 ? orphaned: databases/postgresql84-server
更に???
$ ls -dl /usr/ports/databases/postgres*
drwxr-xr-x 3 root wheel 512 May 28 11:21 /usr/ports/databases/postgresql-jdbc
~ 中 略 ~
drwxr-xr-x 3 root wheel 512 Mar 9 09:10 /usr/ports/databases/postgresql-repmgr
drwxr-xr-x 2 root wheel 512 Jun 3 2013 /usr/ports/databases/postgresql83-client
drwxr-xr-x 2 root wheel 512 Jun 3 2013 /usr/ports/databases/postgresql83-contrib
drwxr-xr-x 2 root wheel 512 Jun 3 2013 /usr/ports/databases/postgresql83-docs
drwxr-xr-x 2 root wheel 512 Jun 3 2013 /usr/ports/databases/postgresql83-plperl
drwxr-xr-x 2 root wheel 512 Jun 3 2013 /usr/ports/databases/postgresql83-plpython
drwxr-xr-x 2 root wheel 512 Jun 3 2013 /usr/ports/databases/postgresql83-pltcl
drwxr-xr-x 3 root wheel 512 Jun 3 2013 /usr/ports/databases/postgresql83-server
drwxr-xr-x 2 root wheel 512 May 23 08:57 /usr/ports/databases/postgresql90-client
drwxr-xr-x 2 root wheel 512 Mar 26 09:08 /usr/ports/databases/postgresql90-contrib
~ 中 略 ~
drwxr-xr-x 3 root wheel 512 Jun 15 09:06 /usr/ports/databases/postgresql93-server
drwxr-xr-x 2 root wheel 512 May 23 08:57 /usr/ports/databases/postgresql94-client
drwxr-xr-x 2 root wheel 512 Mar 26 09:08 /usr/ports/databases/postgresql94-contrib
drwxr-xr-x 2 root wheel 512 Aug 27 2014 /usr/ports/databases/postgresql94-docs
drwxr-xr-x 2 root wheel 512 Jun 3 2014 /usr/ports/databases/postgresql94-pgtcl
drwxr-xr-x 2 root wheel 512 Aug 27 2014 /usr/ports/databases/postgresql94-plperl
drwxr-xr-x 2 root wheel 512 Aug 27 2014 /usr/ports/databases/postgresql94-plpython
drwxr-xr-x 2 root wheel 512 Aug 27 2014 /usr/ports/databases/postgresql94-pltcl
drwxr-xr-x 3 root wheel 512 Jun 15 09:06 /usr/ports/databases/postgresql94-server
drwxr-xr-x 3 root wheel 512 Jun 2 20:09 /usr/ports/databases/postgresql_autodoc
なんと「postgreSQL8.4」だけなくなってるではないの…。あゝ。
しょうがないので、postgreSQL 8.4 を postgreSQL 9.4 にあげることとしました。
2. バックアップ・サーバ停止
現状のデータをバックアップ
pg_dumpall --column-inserts --username=pgsql > pg_dumpall.sql
サーバ停止
/usr/local/etc/rc.d/postgresql stop
データベース全体をバックアップ
cd /usr/local/pgsql/
cp -R data data20150617_backup ここではその日の名前にしました
3. postgres 9.4 インストール
「pkg delete」すると依存関係にある「ports」や「pakage」が削除されてしまうので、「postgreSQL 8.4」をインストールしたまま「postgreSQL 9.4」を入れようとしましたが(メジャーバージョンが違うので浅はかにもできるかと思ったのです)。
cd /usr/ports/databases/postgresql94-client
make
cd /usr/ports/databases/postgresql94-server
make
「client」の「make」までは通ったのですが、「server」の「make」で
===> postgresql94-server-9.4.4 cannot install: the port wants postgresql-client version 9.4 and you have version 8.4 installed.
*** [all] Error code 1
・・・
競合が発生してしまいます。なんとかならないものかと調べたら、なんだ、本家のハンドブックに解法がありました(やはり、ちゃんと読んでおかないとだめですね)。
メジャーバージョンが変更になったような場合はちょうど今回の状況ですと
pkg set -o databases/postgresql84-client:databases/postgresql94-client
Change origin from databases/postgresql84-client to databases/postgresql94-client for postgresql84-client-8.4.22_1? [y/N]: y
pkg set -o databases/postgresql84-server:databases/postgresql94-server
Change origin from databases/postgresql84-server to databases/postgresql94-server for postgresql84-server-8.4.22_2? [y/N]: y
すると
pkg version -vl "<"
php5-pgsql-5.4.41 < needs updating (index has 5.4.42)
postgresql84-client-8.4.22_1 < needs updating (index has 9.4.4)
postgresql84-server-8.4.22_2 < needs updating (index has 9.4.4)
「?」が「<」に変わりました。
これで「portupgrade」が動作するようになります。
portupgrade -vRr php5-pgsqlpostgresql84-client
portupgrade -vRr php5-pgsqlpostgresql84-server
portupgrade -vRr php5-pgsql
4. サーバ起動
「/usr/local/pgsql/data」がそのままで起動できないかと思って起動してみましたが
$ /usr/local/etc/rc.d/postgresql start
LOG: skipping missing configuration file "/usr/local/pgsql/data/postgresql.auto.conf"
LOG: unrecognized configuration parameter "silent_mode" in file "/usr/local/pgsql/data/postgresql.conf" line 272
FATAL: configuration file "/usr/local/pgsql/data/postgresql.conf" contains errors
pg_ctl: could not start server
Examine the log output.
どうも、前のバージョンとコンフィグレーションファイルの構成が違うようです。仕方ないのでデータベースの初期化とリストアを行います。
$ su pgsql
$ initdb -D /usr/local/pgsql/data --encoding=UTF8
The files belonging to this database system will be owned by user "pgsql".
This user must also own the server process.
・・・
--auth-local and --auth-host, the next time you run initdb.
Success. You can now start the database server using:
postgres -D /usr/local/pgsql/data
or
pg_ctl -D /usr/local/pgsql/data -l logfile start
$exit
$ /usr/local/etc/rc.d/postgresql start
LOG: ending log output to stderr
HINT: Future log output will go to log destination "syslog".
若干のワーニングは出力されたものの(この点については後日解決予定)、サーバを起動できました。
5. リストア
psql --username=pgsql --file pg_dumpall.sql postgres
データをいくつか確認して、とりあえずバージョンアップ作業は一段落しました。