F.10. Citext-토토 커뮤니티 민감하지 않은 문자열 유형#

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

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

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

F.10.1. 이론적 해석#

|PostgreSQLLower값을 비교할 때 함수

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

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

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

  • index를 사용하지 않으면 인덱스를 사용하지 않습니다.Lower.

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

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

F.10.2. 사용 방법#

여기에 간단한 예제가 있습니다 :

테이블 사용자 만들기 (
    Nick Citext 1 차 키,
    텍스트를 무효로 전달하십시오
);

사용자 값 ( 'larry', sha256 (random () :: text :: bytea))에 삽입;
사용자 값에 삽입 ( 'tom', sha256 (random () :: text :: bytea));
사용자 값에 삽입 ( 'Damian', SHA256 (random () :: text :: bytea));
사용자 값 ( 'neal', sha256 (random () :: text :: bytea))에 삽입;
사용자 값 ( 'bjørn', sha256 (random () :: text :: bytea))에 삽입;

nick = 'larry'; 사용자 중 * 선택

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

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

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

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

마찬가지로, 다음과 같은 모든 기능은 인수가 인수하는 경우 사례에 관계없이 일치하는 경우citext:

  • regexp_match ()

  • regexp_matches ()

  • regexp_replace ()

  • regexp_split_to_array ()

  • regexp_split_to_table ()

  • 대체 ()

  • split_part ()

  • strpos ()

  • Translate ()

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

F.10.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); 그렇지 않은 경우 정상적인 토토 커뮤니티 민감한텍스트운영자가 대신 호출됩니다.

  • 예를 들어, 하나의 상단 신자 문자가 2 개의 소문자 문자에 해당하는 경우와 같이 일부 유니 코드 특수 사례를 올바르게 처리하지 않습니다. 유니 코드는케이스 매핑and케이스 폴딩이런 이유로. 대신 대신 비정상적인 콜라이트를 사용하십시오.Citext올바르게 처리하려면

F.10.5. 작가#

David E. Wheeler

원래 영감CitextDonald Fraser의 모듈.

정정 제출

문서에 맞지 않는 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 귀하의 경험 또는 추가 설명이 필요합니다. 사용이 양식문서 문제를보고하려면