最初に注意。
CentOS 5 標準の PostgreSQL は 8.1 系なので、8.3 へアップグレードする場合には、ダンプ&リストアが必要になる。既に 8.1 系でデータベースを構築している場合は、pg_dump などを使って、事前にバックアップをしておくことを推奨する。
yum を使ったアップグレード方法は、「Yum Repository Howto」としてまとまっている。これを元に実際に実行してみた記録兼解説をしてみる。
まず yum.postgresql.org に用意されている、CentOS 用の yum リポジトリ設定の RPM パッケージをダウンロードする。
# wget http://yum.pgsqlrpms.org/reporpms/8.3/pgdg-centos-8.3-2.noarch.rpm
ダウンロードした RPM パッケージをインストールする。
# rpm -ivh pgdg-centos-8.3-2.noarch.rpm
CentOS 標準の PostgreSQL パッケージと混在しないように、base と update の定義に除外設定を追記する。
[base] name=CentOS-$releasever - Base mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os #baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/ gpgcheck=1 gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5 exclude=postgresql* [updates] name=CentOS-$releasever - Updates mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates #baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/ gpgcheck=1 gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5 exclude=postgresql*
これで yum update する準備が整ったので、実行する。さっきオレが実行したときの表示ではこのようになった。インストールされている内容によって、update 対象として出てくるパッケージは変わるので、必ずしも全く同じにはならない。
Dependencies Resolved ============================================================================= Package Arch Version Repository Size ============================================================================= Installing: postgresql-plperl i686 8.3.1-1PGDG.rhel5 pgdg83 34 k replacing postgresql-pl.i386 8.1.11-1.el5_1.1 postgresql-plpython i686 8.3.1-1PGDG.rhel5 pgdg83 25 k replacing postgresql-pl.i386 8.1.11-1.el5_1.1 postgresql-pltcl i686 8.3.1-1PGDG.rhel5 pgdg83 24 k replacing postgresql-pl.i386 8.1.11-1.el5_1.1 Updating: postgresql i686 8.3.1-1PGDG.rhel5 pgdg83 1.7 M postgresql-contrib i686 8.3.1-1PGDG.rhel5 pgdg83 389 k postgresql-devel i686 8.3.1-1PGDG.rhel5 pgdg83 1.3 M postgresql-docs i686 8.3.1-1PGDG.rhel5 pgdg83 10 M postgresql-jdbc i686 8.3.603-1PGDG.rhel5 pgdg83 924 k postgresql-libs i686 8.3.1-1PGDG.rhel5 pgdg83 201 k postgresql-odbc i686 08.03.0100-1PGDG.rhel5 pgdg83 242 k postgresql-server i686 8.3.1-1PGDG.rhel5 pgdg83 4.6 M postgresql-test i686 8.3.1-1PGDG.rhel5 pgdg83 1.2 M Installing for dependencies: compat-postgresql-libs i686 4-1PGDG.rhel5 pgdg83 63 k Transaction Summary ============================================================================= Install 4 Package(s) Update 9 Package(s) Remove 0 Package(s) Total download size: 21 M Is this ok [y/N]:
ここで y を押せば、8.3 系へアップグレードできる。無事にアップグレードができたら、早速実行したい訳だが、一度でも 8.1 系を起動したことがあるなら、次のように表示されるはず。
# /etc/rc.d/init.d/postgresql start 古いバージョンのデータベースフォーマットが見付かりました。 PostgreSQL を使う前にデータのフォーマットをアップグレードする必要があります。 より詳細な情報は /usr/share/doc/postgresql-8.3.1/README.rpm-dist を見てください。
この時は、慌てず騒がず旧データ領域ディレクトリをリネームしてしまえば良い。旧データを残しておく必要がないなら削除してしまっても良い。
# mv /var/lib/pgsql/data /var/lib/pgsql/data.old
で、今度こそ 8.3 をスタートする。ただし、データ領域の初期化を先に実行しなければならない。
# /etc/rc.d/init.d/postgresql initdb データベースを初期化中: [ OK ] # /etc/rc.d/init.d/postgresql start postgresql サービスを開始中: [ OK ]
これで起動が完了したので、psql コマンドで PostgreSQL サーバへアクセスできるかどうかを試してみる。
# su - postgres -bash-3.1$ psql template1 Welcome to psql 8.3.1, the PostgreSQL interactive terminal. Type: \copyright for distribution terms \h for help with SQL commands \? for help with psql commands \g or terminate with semicolon to execute query \q to quit template1=# SELECT version(); version -------------------------------------------------------------------------------------------------------- PostgreSQL 8.3.1 on i686-redhat-linux-gnu, compiled by GCC gcc (GCC) 4.1.2 20070626 (Red Hat 4.1.2-14) (1 row) template1=#
ということで、CentOS 5 で PostgreSQL 8.3.1 が稼働した。yum で入れたので、8.3.2 とか出てもラクチン update ができるはず。
CakePHP 1.2.0.6311-beta で PostgreSQL を使おうとすると、UPDATE / DELETE ができないみたいだ。
Trac を眺めていると、Changeset 6491 あたりで修正が入っていたようなので、最新版を check out することにした。
trac.cakephp.org には、
$ svn co https://svn.cakephp.org/repo/trunk/cake/1.2.x.x /path/to/save
と書いてあるので、その通りにやってみたものの、どうもソースの内容が違う。はて?と思って調べてみたら、trunk ではなく branches で開発が進んでいるようだ。
従って、本当の(?)最新版を得るには次のようにする。
$ svn co https://svn.cakephp.org/repo/branches/1.2.x.x/ /path/to/save
これで取得したバージョン(リビジョン 6598)では、PostgreSQL でも UPDATE はできた。DELETE は、まだ実装してないので試していない。6311-beta の dbo_source.php やら dbo_postgres.php だのを眺めていて時間を取られてしまったので。。。