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

标签 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指示我创建约束而不是唯一索引的 Hook 。

最佳答案

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

关于sql - 如何使用 DBIx::Class 创建不区分大小写的唯一索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14287150/

相关文章:

c# - 强制 DBUP 在开发过程中重新运行新脚本

php - MYSQL复杂联合

json - Perl JSON 验证函数

java - 如何使用Mybatis和PostgreSQL创建一个空数组?

postgresql - SET SESSION AUTHORIZATION 多用户 mod-perl2 连接缓存的安全设计

sql - PostgreSQL 在查询返回空的情况下将 NULL 作为一行返回

Mysql查询为每次迭代按顺序对记录进行排序?

php - 存在未知列的 MySQL 警告

perl - 使用 perl 设置环境变量

linux - 如何使用expect替换远程主机上的IP地址