共有タイプのレンタルサーバなどを使っていて、1契約につき、DB が 1つしか使えないような場合ってよくあると思いますが、そこに例えばバージョンが異なる複数の MT をインストールして別々に使いたいなんてこともあると思います。
SQLite は別として、MySQL、PostgreSQL を使用して 1つの DB に複数の MT をインストールしようとすれば、テーブル名が同じになるのですべての MT から同じデータしか参照できません。この場合は、各 MT が生成するテーブル名がかぶらないようにして変更あげればいいわけですが、その変更方法をメモがてら紹介してみようと思います。
MT は、インストール時に 「mt_」 という接頭辞 (prefix) を付けて各テーブルを生成します。テーブル名がかぶらないようにするには、この接頭辞を変えてあげればいいわけです。
MT4 の場合、以下 3つのファイルに書き出される接頭辞が指定されています。
- lib/MT/ObjectDriver/Driver/DBI.pm
- lib/MT/ObjectDriver/Driver/DBD/Legacy.pm
- lib/MT/ObjectDriver/Driver/DBD/Pg.pm
それぞれをテキストエディタなどで開いて、DBI.pm では 15行目あたり、
sub init {
my $driver = shift;
my (%param) = @_;
$param{prefix} ||= 'mt_';
$driver->SUPER::init(%param);
my $opts = $driver->connect_options || {};
$opts->{RaiseError} = 0;
$driver->connect_options($opts);
$driver;
}
「mt_」 となっている部分を例えば 「mt4_」 などに変更しておきます。
次に Legacy.pm 内、50行目あたり、
sub db_column_name {
my $dbd = shift;
my ($table, $col) = @_;
$table =~ s{ \A mt_ }{}xms;
return join('_', $table, $col);
}
同じく、「mt_」 となっている部分を先につけたものと同じものに変更して保存。最後に Pg.pm の 137行目あたり、
return join '_', 'mt',
「mt」 を同様に変更したら、3つのファイルをアップします。この状態でインストール作業に進めば、生成されるテーブル名の接頭辞が変更したものに変わりますので、DB が 1つしかなくても複数の MT を運用できます。
ちなみに MySQL では問題なく動作することを確認していますが、PostgreSQL では確認していませんのでご注意を。それから、すでに MT がインストールされている DB で試す場合には必ず DB のバックアップを取ってからやりましょう。
参考までに、MT3 系の場合は下記のファイルを開いて、「mt_」 という記述を片っ端から任意のものに変更してあげるのと、
- lib/MT/ObjectDriver/DBI/mysql.pm (MySQL)
- lib/MT/ObjectDriver/DBI/postgres.pm (PostgreSQL)
下記のファイルの 20行目あたり、
- lib/MT/ObjectDriver/DBI.pm
sub table_prefix { 'mt' }
という部分の 「mt」 を同じく変更してあげれば MT4 同様にテーブル名を変更できます。