如何使用DBIx :: Class创建不区分大小写的唯一索引

时间:2013-01-11 21:44:11

标签: sql perl postgresql dbix-class

我正在使用Postgres,我希望使用DBIx :: Class在我的数据库上创建一个不区分大小写的唯一约束。

我理解这样的例子:

__PACKAGE__->add_unique_constraint("table_unique_constraint", ["col_name"]);

将在给定表上创建唯一约束。

我正在寻找一种使用DBIx :: Class来创建不区分大小写的唯一约束的方法,但我想说我想创建一个唯一的索引。我想要生成的SQL查询类似于:

CREATE UNIQUE INDEX table_unique_constraint ON "table_name"(lower("column_name"));

此示例确保我在不考虑大小写的情况下检查要插入表中值的条目。

有没有办法将其添加到结果中? Esp,捕获量是lower()。

当然DBIx::Class Manual指示我为唯一索引创建约束而不是钩子。

1 个答案:

答案 0 :(得分:2)

DBIx :: Class本身不会创建DDL查询,因此您的问题不适用。 如果您使用$ schema-> deploy,那么它将使用SQL :: Translator。我不认为DBIC可以拥有这样的特殊元数据来控制唯一的密钥创建,但是看看SQL :: Translator文档是非常确定的。 我建议使用deployment_statements创建DDL语句并修改生成的语句,或使用执行alter SQL语句的after deploy方法修饰符来使生成的约束不区分大小写。