最近PostgreSQLのバージョンを上げていなかったので、たまには上げてやろうと思う。
きっかけは、pg_upgrade と言う新機能のマニュアルを読んだこと。こいつがあると、今までのように pg_dump しなくてもバージョンがあげられるらしい。
ところが、良く良く読んでみると、なかなか条件が厳しい。
  • 旧バージョンと新バージョンの両方のdataディレクトリが別の場所にあること
  • 旧バージョンと新バージョンのバイナリが別の場所にあること
まあ、前者は当然と言えば当然の条件だけど、後者が厳しい。FreeBSDのportsでは複数バージョンの混在を許していないから。
ちなみに、portsから入れたデフォルトではデータディレクトリも /usr/local/pgsql/data なんだけど、これはrc.conf に postgresql_data を定義してやれば自由に変えられる。
試しにpg_dumpallしてみたら1分程度で終わったので、今回も pg_upgrade ではなく dump/restore でバージョンアップすることにする。
前回の記事が postgresqlバージョンアップ - PC日記にあるのだが、あまりにざっくりしているのでもう少し丁寧に書く。(やったことは基本同じだけど)
  1. pgsqlユーザで現在のデータベースのバックアップを取る
    $ pg_dumpall -f dumpall.20111207
    
  2. root でデータベースを止め、既存のバージョンを削除する。
    # /usr/local/etc/rc.d/postgresql stop
    # pkg_deinstall postgresql-server-8.4.7
    # pkg_deinstall -f postgresql-client-8.4.7
    
  3. root で既存のデータディレクトリをリネームする。
    # mv /usr/local/pgsql/data /usr/local/pgsql/data.8.4
    
    これは、将来pg_upgradeみたいな仕組みが使いやすくなったときに、いつも同じディレクトリを使うのではなく、バージョン毎のディレクトリにしておいた方が良さそうなため。PostgreSQLは、x.y.zのx.yの部分が同じならばデータディレクトリは互換性があることになっているので、バージョン8.4.7でもディレクトリは8.4で良い。
  4. 新バージョンをインストール
    # portupgrade -N databases/postgresql91-server
    
  5. /etc/rc.conf 修正
    既存のデータディレクトリのリネームで説明した通り、今後はデータディレクトリにはバージョンをつけることにしたので、/etc/rc.conf に以下を追加
    postgresql_data="/usr/local/pgsql/data.9.1"
    
  6. データベース作成
    # /usr/local/etc/rc.d/postgresql initdb
    
    ※ 前回の記事では、initdb -E utf8をやり直したと書いてあるが、最近の rc.d/postgresql では initdb のデフォルトのオプションで "--encoding=utf-8 --lc-collate=C" が指定されているので、そのままで問題ない。
  7. データベース起動
    # /usr/local/etc/rc.d/postgresql start
    
  8. データベースのバックアップからの復元
    # psql -U pgsql postgres < dumpall.20111207
    
これで、dump/restore を使った PostgreSQL のバージョンアップの出来上がり。
後は、各種クライアントの動作チェックをして、っていきなり MovableType でログインしようとすると Can't use string ("x42494e3a53455247000000000000000") as an ARRAY ref while "strict refs" in use と言うエラーが出る。
mt-error.jpg

これはまた泣きながら8.4に戻さないと駄目か?と思ったが、一応エラーメッセージでぐぐってみるといきなり正解にたどり着いた。Can't use string .... as an ARRAY ref while strict refs in use - Movable Type Forums
ここには、postgresql.conf に bytea = 'escape' と書けとあるが、9.1の実際の postgresql.conf を見ると bytea_output と書いてあるようなので、以下の行を追加した。
bytea_output = 'escape'
これで、無事に MovableType も動くようになった。

カテゴリ

トラックバック(0)

このブログ記事を参照しているブログ一覧: PostgreSQL9.1.1に上げる

このブログ記事に対するトラックバックURL: https://www.wizard-limit.net/cgi-bin/mt/mt-tb.cgi/2818

コメントする

このブログ記事について

このページは、falseが2011年12月 7日 23:25に書いたブログ記事です。

ひとつ前のブログ記事は「Jenkinsのインストール」です。

次のブログ記事は「FreeBSD 9.0 アップグレード失敗」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

広告

Powered by Movable Type 6.1.1