0

私は DBIx::Class を使用しており、次の目的で sqlt_deploy_hook を使用しています。

sub {
    my ($self, $sqlt_table) = @_;
    $sqlt_table->add_index(name => 'indexes', fields => [keys %for_indexing]);
}

インデックスを作成したい列の一部はテキスト型であるか、長さが 255 を超える varchars です。次のように長さを指定しない限り、MySQL はテキスト インデックスを好みません。

index (long_field(996))

しかし、SQL::Translator::Schema::Table (add_index メソッドがある) と Index を見ると、長さを指定する方法がわかりません。

add_index(name => 'indexes', fields => ['long_field'])

次の SQL を生成します。

INDEX `indexes` (`long_field`)

この:

add_index(name => 'indexes', fields => ['long_field(996)'])

次の SQL を生成します。

INDEX `indexes` (`long_field(996)`)

その名前の列がないため、これは機能しません。

これまでは、テキスト列にインデックスを付けないことでこれを回避してきました。ただし、「インストール」時に長い varchar をテキスト列に変換する DBIx::Class::DeploymentHandler を使用しようとしていますが、それらの varchar 列にインデックスを付ける必要があります。

私に何ができる?

4

1 に答える 1

1

申し訳ありませんSQL::Translatorが、長さのあるインデックス宣言を作成する方法がわかりません。つまり、DBICdeployとDBICDHは、SQLTを介して作業を行うため、どちらも作成できません。irc.perl.orgにアクセス#sql-translatorして、この機能がどのように機能し、インターフェイスがどのようになるかについて話し合いたい場合は、追加される可能性がありますが、現在は不可能です。

DBICDHが「私の長いvarcharをテキスト列に変換している」というあなたの主張に関しては、それは非常に間違っています。DBICDHにとっては望ましくない動作です。その問題について新しい質問を投稿して、あなたが何をしているのかを示すか、irc.perl.orgに持ってきてください#dbix-class

于 2011-07-28T14:22:29.263 に答える