メンテナンス・トラブルシュート - pkg・ports アップデート関連 - postgreSQL バージョンアップ

 
1. 概要
2. バックアップ・サーバ停止
3. postgres 9.4 インストール
4. サーバ起動
5. リストア

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/postgresql84-client9
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-client:databases/postgresql94-clientdatabases/postgresql84-server/:databases/postgresql84-server94
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
 データをいくつか確認して、とりあえずバージョンアップ作業は一段落しました。