1

我正在使用 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"));

这个例子确保我在不考虑大小写的情况下检查表中的值是否插入了条目。

有没有办法将它添加到结果中?特别是,捕获是lower()。

当然,DBIx::Class Manual指导我创建约束而不是唯一索引的挂钩。

4

1 回答 1

2

DBIx::Class 本身不会创建 DDL 查询,因此您的问题不适用。如果您使用 $schema->deploy,则在后台使用 SQL::Translator。我不认为 DBIC 可以保存这种特殊的元数据来控制唯一密钥的创建,但请查看 SQL::Translator 文档以确保真正确定。我建议使用 deployment_statements 创建 DDL 语句并修改生成的语句,或者使用 after deploy 方法修饰符执行更改 SQL 语句以使生成的约束不区分大小写。

于 2013-01-12T11:55:11.943 回答