![](/img/trans.png)
[英]How do I create a GiST index on a PostGIS geometry column using DBIx::Class?
[英]How do you specify index length when using DBIx::Class?
我正在使用DBIx :: Class并且正在使用sqlt_deploy_hook来:
sub {
my ($self, $sqlt_table) = @_;
$sqlt_table->add_index(name => 'indexes', fields => [keys %for_indexing]);
}
我要索引的某些列是text类型的,或者是varchars> 255长度。 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)`)
这不起作用,因为没有具有该名称的列。
到目前为止,我只是通过不对文本列进行索引来解决此问题。 但是,我现在正在尝试使用DBIx :: Class :: DeploymentHandler,它在我“安装”时将我的长varchars转换为文本列,而我确实需要索引这些varchar列。
我能做什么?
抱歉, SQL::Translator
根本不了解如何生成具有长度的索引声明,这意味着DBIC deploy
和DBICDH也无法做到这一点,因为它们是通过SQLT进行工作的。 如果您想通过irc.perl.org #sql-translator
讨论此功能的工作原理以及接口是什么,可能会添加它,但目前尚无法实现。
关于您的断言DBICDH是“将我的长varchars转换为文本列”,这有一个很大的错误; 对于DBICDH而言,这不是您期望的行为。 请发布有关该问题的新问题,以显示您在做什么,或将其带到irc.perl.org #dbix-class
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.