[백업][가리사니] 대소문자를 구분하지 않고 검색하기 [함수인덱스]
postgresql

이 문서는 가리사니 개발자 포럼에 올렸던 글의 백업 파일입니다. 오래된 문서가 많아 현재 상황과 맞지 않을 수 있습니다.

PostgreSQL 에서는 MySQL이나 MSSQL의 기본값들처럼 대소문자를 무시하는 것이 아닌 대소문자를 구분하여 검색합니다. 예를들어 닉네임 같은경우는 대소문자를 쓸수있지만 대소문자만 다르게 해서 등록하는 경우 사칭이 가능해짐으로 이를 막아야합니다. 이때 lower()라는 소문자로 변환시키는 함수를 이용하여 함수인덱스를 만들 수 있습니다.

CREATE INDEX 인덱스이름 ON 테이블이름 (lower(필드이름));

이렇게 될경우 해당 함수가 실행된 결과로 인덱스를 생성합니다. 당연한 이야기지만 함수의 반환값은 특별한 경우가 아니면 정적이여야합니다. 인덱스를 빌드하는 시점의 실행한 값이 인덱스가 됨으로 가변적인 값이 나오는 함수를 사용할경우 제대로된 인덱스를 타지 않습니다.

SELECT * FROM 테이블이름 WHERE lower(필드이름) = '검색할값, 당연하지만 소문자';

사용예제입니다.