最新の投稿

HKU\.Defaultはデフォルトユーザのものではない。

HKU\.DEFAULT(HKEY_USERS\.DEFAULT)は、あちこちで間違った認識をされている。HKU\.DEFAULT(HKEY_USERS\.DEFAULT)は、デフォルトユーザとかテンプレートユーザと呼ばれるアカウント(=今後作成されるユーザアカウントの初期設定)...

2005/12/17

MovableTypeのアップグレード

MovableTypeを2.661から3.2-ja-2にアップグレードしました.
3.0から有料になったので, どうしようかと躊躇していましたが,
そろそろ頃合いかなと思い, 12,000円ほど払いました.

しかし, アップグレードにハマる, ハマる.

まず, アップグレード画面でtemplate_created_onがNullになっていて先に進まない.
mt_templateテーブルに, template_created_on列をtimestamp型で作り込んで,
現在時刻をタイムスタンプとして入れておくと, 何とかアップグレード完了.

しかし, さらに難問.
今度は, ログインできなくなった....
いろいろ試行錯誤の結果, 以下の方法により回避させた.
まず, mtデータベースをドロップさせる.
# su - postgres
% psql template1
template1=# drop database mt;
template1=# \q

さらに, いままで, EUC-JPにしていたが, これからUFT-8にすることにしたので,
アップグレードにダンプしたダンプファイル内のCREATE TABLEは使わないことにする.
また, 問題となるmt_templateテーブルは自分であらかじめ作成しておいてやる.

やることは簡単. 以下のコマンドをファイルに書き込み, postgres権限にて
% psql template1 < ファイル名
をすればよい.
--------------------ここから--------------------
CREATE DATABASE mt WITH TEMPLATE = template0 OWNER = postgres ENCODING = 'UNICODE';
\connect mt;
create table mt_template (
    template_id integer primary key not null,
    template_blog_id integer not null,
    template_name varchar(50) not null,
    template_type varchar(25) not null,
    template_outfile varchar(255),
    template_rebuild_me smallint,
    template_text text,
    template_linked_file varchar(255),
    template_linked_file_mtime varchar(10),
    template_linked_file_size integer,
--    template_created_on timestamp not null,
    template_created_on timestamp,
--    template_modified_on timestamp not null,
    template_modified_on timestamp,
    template_created_by integer,
    template_modified_by integer,
    template_build_dynamic smallint,
    unique (template_blog_id, template_name)
);
create sequence mt_template_id;
create index mt_template_type on mt_template (template_type);
--------------------ここまで--------------------

次に, ダンプしておいたデータをリストアさせる
% psql template1 < ダンプファイル名
(ただし, 以前のデータがEUC-JPで入っていたので, ダンプファイルの内容は
nkf -wでUTF-8に変換してある)

次に, 問題となるnot null制約の列にデータを投入し, 解除しておいた
not null制約を復活させる.

% psql mt
template1=# update mt_template set template_created_on = current_timestamp,  template_modified_on = current_timestamp ;
template1=# ALTER TABLE mt_template ALTER COLUMN template_created_on SET NOT NULL;
template1=# ALTER TABLE mt_template ALTER COLUMN template_modified_on SET NOT NULL;
template1=# \q

ここまでしておいてからmt-upgrade.cgiを呼び出してやれば,
正常にアップグレードできる.

0 件のコメント: