2013-01-11 3 views
1

저는 Postgres를 사용하고 있으며 DBIx :: Class를 사용하여 데이터베이스에서 대/소문자를 구분하지 않는 고유 제한을 생성하려고합니다.DBIx :: Class를 사용하여 대/소문자를 구분하지 않는 고유 인덱스를 만드는 방법

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

주어진 테이블에 고유 제한 조건을 만들 것입니다 :

나는 예를 들어 같은 것을 이해합니다.

더 나은 DBIx :: Class를 사용하여 대소 문자를 구분하지 않는 고유 제한 조건을 만드는 방법을 찾고 있는데 고유 인덱스를 만들고 싶습니다.

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

이 예는 항목이 계정에 사건을 복용하지 않고 테이블의 값에 삽입 될 수 있도록 내가 확인 있는지 확인합니다 : 내가 생성하기 위해 노력하고 SQL 쿼리는 같은 것입니다.

결과에이 방법을 추가 할 수 있습니까? Esp, catch가 lower()입니다.

물론 DBIx::Class Manual은 고유 인덱스에 대한 후크 대신 제약 조건을 만들도록 지시했습니다.

+0

[FilterColumn] (http://search.cpan.org/dist/DBIx-Class/lib/DBIx/Class/FilterColumn.pm)이 도움이 될 것입니다. 'lower_function'을 'filter_to_storage'에 추가하십시오. – alex

답변

2

DBIx :: Class 자체는 DDL 쿼리를 작성하지 않으므로 사용자의 질문은 적용되지 않습니다. $ schema-> deploy를 사용하면 SQL :: Translator가 사용됩니다. 나는 DBIC이 고유 한 키 생성을 제어하기 위해 특별한 메타 데이터를 보유 할 수 있다고 생각하지 않지만 실제로는 SQL :: Translator 문서를 살펴 봅니다. deployment_statements를 사용하여 DDL 문을 작성하고 생성 된 DDL 문을 수정하거나 alter SQL 문을 실행하는 after deploy 메소드 수정자를 사용하여 생성 된 제약 조건을 대소 문자를 구분하지 않도록하는 것이 좋습니다.