Drupal 4.7.xからDrupal 5.3への移行

いつの間にか、Drupal 6のβリリースのアナウンスを耳にするようになり、Drupal 5.xのモジュールも勢ぞろいしている状態になっていた。いくつかの理由で途中めげていたDrupal 4からDrupal 5への移行をやってみた。

移行したのは、Drupal 4.7.8からDrupal 5.3へで、DBMSにはPostgreSQL 8.2.5を使っている。Drupal 4.xのデータベースをコピーして Drupal 5でupdate.phpを実行することでデータベースはDrupal 5対応となる。移行には追加モジュールの対応も必要で、利用していたモジュールは現在すべてそろっていた。しかし、データベースアクセスのエラーが出たため、少し手直しをした。しかし、妙なことに、最近の投稿(tracker)が古い順に出てきてしまう。

移行にめげていた理由のもうひとつは、あまりにも重たかったこと。
どうも検索がうまくゆかないと思っていて、最近になって気が付いたのだが、日本語の検索のためのインデクスが3文字(全角)くらいずつに細切れにされて、テーブルに突っ込まれていた。


ダーティハックであるが一応以下が修正差分。

% diff includes/database.pgsql.inc~ includes/database.pgsql.inc
421c421< $field_to_select = 'DISTINCT ON ('. $table .'.'. $field .") $table.$field";

    • -

> $field_to_select = 'DISTINCT ('. $table .'.'. $field .')';
424a425
> $query = preg_replace('/(DISTINCT )(.*)(ORDER BY)/', '\2'.'\3', $query);

% diff modules/workspace/workspace.module~ modules/workspace/workspace.module
195c195< $comment_sql = 'SELECT c.nid AS cnid, c.uid, "" AS type, c.cid, c.subject, c.status, c.timestamp, c.pid, 0 '. $select .' FROM {comments} AS c, {node} n LEFT JOIN {node_comment_statistics} s ON n.nid = s.nid WHERE c.uid = '. db_escape_string($user->uid);

    • -

> $comment_sql = "SELECT c.nid AS cnid, c.uid, '' AS type, c.cid, c.subject, c.status, c.timestamp, c.pid, 0 ". $select .' FROM {comments} AS c, {node} n LEFT JOIN {node_comment_statistics} s ON n.nid = s.nid WHERE c.uid = '. db_escape_string($user->uid);