F.9. Citext-윈 토토 민감하지 않은 문자열 유형#

theCitext모듈은 윈 토토 민감한 문자열 유형을 제공합니다.Citext. 본질적으로 내부적으로 호출Lower값을 비교할 때. 그렇지 않으면 거의 정확히 동작텍스트.

사용 고려비 결정적 콜라이트(참조섹션 23.2.2.4)이 모듈 대신. 윈 토토 민감한 비교, 악센트 불이행 비교 및 ​​기타 조합에 사용될 수 있으며 더 많은 유니 코드 특수 사례를 올바르게 처리합니다..

이 모듈이 고려됩니다신뢰할 수있는Create현재 데이터베이스의 권한.

F.9.1. 이론적 해석#

윈 토토 민감하지 않은 일치를 수행하는 표준 접근 방식postgresqlLower값을 비교할 때 함수

선택 *에서 탭에서 where (col) = holl (?);

이것은 합리적으로 잘 작동하지만 많은 단점이 있습니다 :

  • 그것은 당신의 SQL 진술을 장악하게 만들고, 항상 사용하는 것을 기억해야합니다Lower열과 쿼리 값 모두에서

  • 기능을 사용하여 기능 색인을 작성하지 않는 한 색인을 사용하지 않습니다Lower.

  • 열을 |고유 한또는기본 키, 암시 적으로 생성 된 인덱스는 대소 문자에 민감합니다. 따라서 윈 토토 민감하지 않은 검색에는 쓸모가 없으며 독창성 사례를 강력하게 시행하지 않습니다.

theCitext데이터 유형은 전화를 제거 할 수 있습니다LowerSQL 쿼리에서 기본 키가 대소 문자를 사용하도록 허용합니다.Citext텍스트, 이는 대문자와 소문자의 일치가 데이터베이스 규칙에 따라 다르다는 것을 의미합니다LC_CTYPE설정. 다시 말하지만,이 동작은 사용과 동일합니다.Lower쿼리. 그러나 데이터 유형에 의해 투명하게 수행되기 때문에 쿼리에서 특별한 일을하는 것을 기억할 필요가 없습니다..

F.9.2. 사용 방법#

여기 사용의 간단한 예는 다음과 같습니다.

테이블 사용자 만들기 (

theselect명령문은이지만 튜플 한 명을 반환합니다.Nick열로 설정되었습니다Larry그리고 쿼리는입니다.Larry.

F.9.3. 문자열 비교 동작#

Citext각 문자열을 소문자로 변환하여 비교를 수행합니다 (Lower호출)와 결과를 정상적으로 비교합니다. 예를 들어, 두 줄은 동일하게 간주됩니다.Lower그들에 대해 동일한 결과를 생성 할 것입니다.

가능한 한 가깝게 윈 토토 민감한 콜라주를 모방하기 위해Citext-여러 스트링 처리 연산자 및 함수의 특이 적 버전. 예를 들어, 정규 표현 연산자~~*적용될 때 동일한 동작을 전시합니다Citext: 둘 다 케이스 비면적으로 일치합니다. 똑같은!~!~*뿐만 아니라좋아요운영자~~~~*!~~!~~*. 사례에 민감하게 일치 시키려면 운영자의 주장을에 캐스팅 할 수 있습니다.텍스트.

마찬가지로, 다음과 같은 모든 기능은 인수가 인수하는 경우 사례를 사용하지 않는 일치를 수행합니다Citext:

  • regexp_match ()

  • regexp_matches ()

  • regexp_replace ()

  • regexp_split_to_array ()

  • regexp_split_to_table ()

  • 대체 ()

  • split_part ()

  • strpos ()

  • Translate ()

regexp 함수의 경우 윈 토토 관계없이 일치하려면를 지정할 수 있습니다.c깃발을 강제하여 대사에 민감한 경기를 강요합니다. 그렇지 않으면, 당신은에 캐스트해야합니다.텍스트윈 토토 민감한 동작을 원하는 경우 이러한 기능 중 하나를 사용하기 전에.

F.9.4. 제한#

  • Citext'의 사례 확장 동작은에 따라 다릅니다.LC_CTYPE데이터베이스 설정. 따라서 값을 비교하는 방법은 데이터베이스가 생성 될 때 결정됩니다.Citext의 비교. 그러나 데이터베이스에 저장된 다른 언어로 된 데이터가있는 경우 한 언어 사용자는 쿼리 결과가 다른 언어에 대한 경우 쿼리 결과가 예상되지 않을 수 있습니다.

  • postgresql9.1, a를 첨부 할 수 있습니다Collate사양Citext열 또는 데이터 값. 현재,Citext운영자는 비 디폴트를 존중합니다Collate사양 사례를 비교하는 동안 사양이지만 초기 접이식은 데이터베이스에 따라 항상 수행됩니다.LC_CTYPE설정 (즉, 마치"기본값"가 제공되었습니다). 이것은 미래의 릴리스에서 변경 될 수 있으므로 두 단계 모두 입력을 따릅니다Collate사양.

  • Citext만큼 효율적이지 않습니다텍스트운영자 기능과 B- 트리 비교 함수는 데이터의 사본을 만들고 비교를 위해 소문자로 변환해야합니다. 또한, 만텍스트B-Tree 중복 제거를 지원할 수 있습니다. 하지만,Citext사용하는 것보다 약간 더 효율적입니다Lower윈 토토 민감한 일치를 얻으려면

  • Citext다른 상황에서는 일부 상황에서 윈 토토 민감하게 비교하기 위해 데이터가 필요한 경우 많은 도움이되지 않습니다. 표준 답변은 사용하는 것입니다.텍스트입력하고 수동으로Lower사례 비교를 비교해야 할 때 기능; 이것은 윈 토토 민감하지 않은 비교가 드물게 필요하다면 잘 작동합니다.Citext그리고 열을 명시 적으로텍스트윈 토토 민감한 비교를 원할 때. 두 가지 상황에서는 두 가지 유형의 검색이 빠르기를 원한다면 두 가지 인덱스가 필요합니다.

  • 포함하는 스키마Citext운영자는 현재에 있어야합니다search_path(일반적으로public); 그렇지 않은 경우 정상적인 윈 토토 민감한텍스트운영자가 대신 호출됩니다.

  • 비교를위한 저 케이싱 스트링의 접근은 일부 유니 코드 특수 사례를 올바르게 처리하지 않습니다. 유니 코드는케이스 매핑케이스 폴딩이런 이유로. 대신 대신 비정상적인 콜라이트를 사용하십시오.Citext올바르게 처리하려면

F.9.5. 작가#

David E. Wheeler

원래 영감CitextDonald Fraser의 모듈.

정정 제출

문서에 올바르지 않은 내용이 있으면 일치하지 않습니다.이 양식문서 문제를보고하려면