PostgreSQL のバージョンアップ(7.3.2へ)と旧バージョンからのデータ引き継ぎ

以前書いた postgres バージョンアップ の追記。
当時は 7.1 あたりだったと思うのですが、今回はそれを 7.3.2 へバージョンアップしたときの覚え書き。 (2003/05/23)

バックアップ

現在動いてるDBのバックアップを取ります。

$ pg_dumpall > backup.data

バックアップが終わったら postgres を停止します。

$ pg_ctl stop

ps で postmaster が居なくなってることを確認しましょう。 pg_hba.conf などの自分で追記したファイルはしっかり取っておきましょう。 /usr/local/pgsql/data を消すなり移動するなりして、とにかくその場所から無くします。

7.3.2 インストール & 起動

ますますマルチバイト対応が安定してまいりました。いつもどおりインストールはフィーリングで。

$ ./configure --enable-nls=ja
$ make
$ make install
$ initdb -E EUC_JP -D /usr/local/pgsql/data
$ pg_ctl -o "-i" -D /usr/local/pgsql/data start

initdb の時に -E で Encoding を指定しておくことにより、その DB のデフォルトの Encoding が決定できます。 僕は普通に日本語が使えればいいので、EUC_JP を指定しました。 ここで使える Encoding のリストは マニュアル にあるとおりです。

以前のデータをリストア

動き始めたスッカラカンの新バージョンに、さっき取ったバックアップを戻します。

$ psql -d template1 -f backup.data

これでおしまいです。の、はずでしたがチョット待て。
psql -l すると template1 の Encoding は ECU_JP なんだけど、 自分で作って今まで使ってた (今回リストアした) DB は、 Encoding が何故か SQL_ASCII になっていてすっごく寂しいです。

$ psql -l
List of databases
Database  | Owner    | Encoding
----------+----------+---------------
dbname001 | postgres | SQL_ASCII
template1 | postgres | EUC_JP

今までの使い方が悪かったのか、今回のリストア方法が間違ってたのか…
なので、 EUC_JP に変えるために考えました。けっこうヘボい方法です。

DBの中身を吐く

$ pg_dump dbname001 > dumpfile

消す

$ dropdb dbname001

新たに作る( initdb -E EUC_JP やっとくと、特に指定しない限り EUC_JP で作られます )

$ createdb dbname001

さっき吐いたデータを吸う

$ psql -d dbname001 -f dumpfile

これでどーにかなりました。

Moriya / moriya@s1.xrea.com