DBからPostgreSQLへの移行する際の注意点MTのエントリが多くなりすぎて、再構築ができなくなったと友達から連絡をもらい、確認したところ、DBにBerkeleyDBを使っていたので、それを改善すべくDBをBerkeleyDBからPostgreSQLに移行してみました。その際、MTのマニュアルにしたがってやってみたところ、そのままではうまくいかなかったので、行った作業をメモ的に残しておきます。PostgreSQLの設定まず、マニュアルをみてPostgreSQLの設定をしました。基本マニュアルどおりに進めて、mt-config.cgiの設定を変更し、データベースの作成をおこないました。DBの文字コードはUTF-8だったので、DB作成の際、文字コードを指定しました。次にマニュアルどおりMT付属の移行スクリプトを実行したところ、DBの文字コードと違う文字コードのデータを入れようとした旨のエラーメッセージが出て、移行スクリプトを完了できませんでした。文字コードの違うデータというのは、トラックバックPingのデータで、トラックバック元のブログの文字コードがUTF-8ではないものがエラーではじかれているようでした。これは、文字コードが違うPingを探し出して削除するのは面倒くさかったので、移行スクリプトのほうを修正して、インサートに失敗しても処理を続行するようにして、回避しました。修正点は以下のとおり。saveに失敗してもdieしないようにしただけです。MTの方で、DBへのアクセスが高度に抽象化されているので、修正は非常に簡単です。parents<この修正版のスクリプトを再度実行したところ、今度は問題なく、データの移行が完了しました。シーケンスの作成、更新これで万事OKかと思ったんですが、この状態でエントリを作成しようとすると、以下のようなエラーがでて、作成できなくなってしまいました。entry_id<このエラーでググッてみると、どうやらDB内にシーケンスがないためのようです。先ほどの移行用スクリプトだと、テーブルは作成されてもシーケンスは作成してくれないみたいです。わかれば、後はシーケンスを手動で作成するだけです。以下のSQLを実行し、シーケンスを作成し、格納されている値を現在の最大値にセットしたところ、問題なく動くようになりました。文字コードの問題でエラーがでるため、移行スクリプトを修正して、エラーを無視するようにする。シーケンスは作成されないので手動で作成する。2つを注意しないといけないようです。