[pgsql-jp: 31497] Re: 7.0.3 から 7.3.4 へのデータの移行について

Yasuhiro Hayase hayase @ hcn.zaq.ne.jp
2003年 11月 18日 (火) 23:32:49 JST


早瀬です。

文字化けしたデータの移行では、私も何度か苦労しました。



新旧のデータベースを同時に動かせない場合は、テキスト形式で dump してから、
文字化けしたデータを削除します。条件はいろいろあるので難しいのですが、
1行に区切文字 (tab) が規定数含まれていない行や、不正な文字コードを含んでい
る行を削除し、別のファイルに書き出します。

それでも残ってしまった文字化けデータは、手で削除します。



新旧のデータベースを同時に動かせる場合は、 select した結果を insert するプ
ログラムを作成すればよいでしょう。 perl の DBD 等を使えば、割と簡単に書け
ます。

insert 一件毎に commit するのが確実なのですが、かなり遅くなってしまいま
す。そこで、適度なサイズ (insert 1000件程度?) に分割したトランザクションを
作ることで、かなりの高速化が可能になります。(DBD の場合は AutoCommitを 0 
にします)

文字化けしたデータを insert すると、 rollback しなければならなくなります。
この時はトランザクションの頭の insert クエリからやり直してください。もちろ
ん、やり直すときには 1 件毎に commit します。

以前私が作業した時には、 primary key 以外の index や参照制約は、 insert を
終えてから付ける方が高速でした。また、 insert クエリよりも copy クエリの方
が高速ですので、可能な場合は copy を使うと良いでしょう。



私の記憶にあるのはこれくらいです。個人的にはプログラムで頑張れるので、後者
をお勧めします。

それでは、移行作業がんばってください。

-- 
早瀬 康裕
大阪大学大学院情報科学研究科コンピュータサイエンス専攻博士前期課程2年
ソフトウェア工学講座 (井上研究室)




pgsql-jp メーリングリストの案内