雑文発散

«前の日記(2008-03-22) 最新 次の日記(2008-03-24)» 編集
過去の日記

2008-03-23 [長年日記]

[PostgreSQL] CentOS 5 の PostgreSQL を 8.3.1 へ yum update する

最初に注意。

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 ができるはず。

[PHP] CakePHP 1.2 の最新版を取得する

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 だのを眺めていて時間を取られてしまったので。。。