토토 베이 Feature를 사용하면 CORNT 순서 및 문자 분류 동작을 열 당 또는 수술별로 지정할 수 있습니다. 이것은의 제한을 완화합니다.LC_COLLATE
andLC_CTYPE
생성 후에 데이터베이스 설정을 변경할 수 없습니다.
개념적으로, Collatable 데이터 유형의 모든 표현식에는 토토 베이이 있습니다. (내장 된 Collatable 데이터 유형은입니다.텍스트
, varchar
및char
. 사용자 정의 기본 유형은 또한 Collatable으로 표시 될 수 있으며, 물론 Collatable 데이터 유형의 도메인은 Collatable입니다.) 표현식이 열 참조 인 경우 표현식의 정의는 열의 정의 된 정의입니다.
표현의 협업은가 될 수 있습니다.“기본값”토토 베이, 이는 데이터베이스에 정의 된 로케일 설정을 의미합니다. 표현의 협업이 불확실해질 수도 있습니다.
데이터베이스 시스템이 순서 또는 문자 분류를 수행 해야하는 경우 입력 표현식의 충돌을 사용합니다. 예를 들어와 같은 이런 일이 발생합니다.주문 by
조항 및 기능 또는 연산자 호출<
. 신청을위한 콜레이션주문 by
절은 단순히 정렬 키의 충돌입니다. 기능 또는 연산자 호출을 신청하기위한 콜레이션은 아래에 설명 된대로 인수에서 파생됩니다.Lower
, 어퍼
및initcap
; 패턴 일치 연산자로;to_char
및 관련 기능.
함수 또는 운영자 호출의 경우, 인수 콜라주를 검사하여 도출 된 토토 베이은 지정된 작업을 수행하기 위해 실행 시간에 사용됩니다. 함수 또는 운영자 호출의 결과가 Collatable Data 유형 인 경우, 토토 베이에 대한 지식이 필요한 주변 표현식이있는 경우 기능 또는 연산자 표현식의 정의 된 토토 베이으로 구문 분석 시간에도 콜레이션이 사용됩니다..
the토토 베이 Devation표현식은 암시 적이거나 명시적일 수 있습니다. 이 차이점은 여러 다른 콜라이트가 표현식에 나타날 때 콜로레이션이 결합되는 방식에 영향을 미칩니다.Collate
조항이 사용됩니다. 다른 모든 토토 베이 파생물은 암시 적입니다.
입력 표현식에 명시 적 충전도가 도출 된 경우 입력 표현식 간의 모든 명시 적으로 도출 된 콜라주가 동일해야합니다. 그렇지 않으면 오류가 발생해야합니다. 명시 적으로 파생 된 협업이 존재하는 경우, 이는 토토 베이 조합의 결과입니다.
그렇지 않으면 모든 입력 표현식은 동일한 암시 적 콜레이션 파생 또는 기본 콜레이션을 가져야합니다. 비 디폴트 콜레이션이있는 경우, 이는 토토 베이 조합의 결과입니다.
입력 표현식간에 비 분리 암시 적 콜라주가 충돌하는 경우 조합은 불확실한 협업을 갖는 것으로 간주됩니다. 호출되는 특정 함수가 적용 해야하는 콜라이트에 대한 지식이 필요하지 않는 한 오류 조건이 아닙니다.
예를 들어,이 표 정의를 고려하십시오 :
테이블 생성 테스트 1 (
in
test1에서 < 'foo'를 선택하십시오.
the<
비교는에 따라 수행됩니다.de_de
규칙. 표현식은 암시 적으로 파생 된 토토 베이과 기본 충돌을 결합하기 때문입니다. 그러나에서
a <( 'foo'collate "fr_fr")에서 test1; 선택
비교는를 사용하여 수행됩니다.FR_FR
규칙. 또한 주어진
test1에서파서는 이후에 적용 할 콜라이트를 결정할 수 없습니다
a
andb
열에는 암시 적 콜라이트가 상충됩니다. 이후로<
운영자는 어떤 콜라이트를 사용할 것인지 알아야하므로 오류가 발생합니다. 명시적인 토토 베이 지정자를 입력 표현식에 첨부하여 오류를 해결할 수 있습니다.a또는 동등하게
테스트 1에서 "de_de"반면에 구조적으로 유사한 경우
a ||를 선택하십시오 b test1;이기 때문에 오류가 발생하지 않습니다.
||
운영자는 토토 베이에 신경 쓰지 않습니다. 결과는 콜라이트에 관계없이 동일합니다.함수 또는 연산자의 결합 된 입력 표현식에 할당 된 콜레이션은 함수 또는 연산자가 Collatable 데이터 유형의 결과를 전달하는 경우 기능 또는 연산자의 결과에 적용되는 것으로 간주됩니다. 그래서에서
a ||의 test1 주문 * 선택 * 'foo';주문은에 따라 수행됩니다.
de_de
규칙. 하지만이 질문 :a ||의 test1 주문 * 선택 * 비;오류가 발생하지만.
||
운영자는 토토 베이, The를 알 필요가 없습니다.주문 by
절의 조항. 이전과 마찬가지로, 분쟁은 명백한 Collation 지정자로 해결 될 수 있습니다.선택 *에서 test1 주문에서 || b "fr_fr"; Collate
토토 베이은 운영 체제에 설치된 라이브러리가 제공하는 로케일에 SQL 이름을 매핑하는 SQL 스키마 객체입니다. 토토 베이 정의에는가 있습니다.공급자로케일 데이터를 공급하는 라이브러리를 지정합니다. 하나의 표준 제공자 이름은입니다.LIBC
, 운영 체제 C 라이브러리가 제공하는 로케일을 사용합니다. 이들은 운영 체제에서 제공하는 대부분의 도구가 사용하는 로케일입니다.ICU
, 외부 ICU를 사용하는라이브러리. ICU 로케일은 PostgreSQL을 구축 할 때 ICU에 대한 지원이 구성된 경우에만 사용할 수 있습니다.
토토 베이 객체가 제공하는LIBC
LC_COLLATE
andLC_CTYPE
설정,setLocale ()
시스템 라이브러리 호출. (이름에서 알 수 있듯이, 콜레이션의 주요 목적은 설정하는 것입니다LC_COLLATE
, 정렬 순서를 제어합니다. 그러나 실제로는 거의 필요하지 않습니다.LC_CTYPE
다른 설정LC_COLLATE
, 따라서 설정을위한 다른 인프라를 만드는 것보다 하나의 개념으로 이러한 개념을 수집하는 것이 더 편리합니다LC_CTYPE
표현 당.) 또한 aLIBC
토토 베이은 캐릭터 세트 인코딩에 묶여 있습니다 (참조섹션 23.3). 다른 인코딩에 대해 동일한 토토 베이 이름이 존재할 수 있습니다.
토토 베이 객체가 제공하는ICU
ICU 라이브러리에서 제공하는 명명 된 Collator에지도. ICU는 별도의 지원을 지원하지 않습니다“Collate”and“CTYPE”설정이므로 항상 동일합니다. 또한 ICU 콜라주는 인코딩과 무관하므로 데이터베이스에는 항상 주어진 이름의 ICU 콜레이션 만 있습니다.
모든 플랫폼에서 콜라이트라는 콜라이트기본값
, C
및posix
사용 가능합니다. 운영 체제 지원에 따라 추가 콜로레이션을 사용할 수 있습니다.기본값
토토 베이을 선택합니다LC_COLLATE
andLC_CTYPE
데이터베이스 생성 시간에 지정된 값. 그만큼C
andposix
토토 베이s 둘 다 지정“전통적인 C”행동, ASCII 편지 만“A
”through“Z
”문자로 취급되고 문자 코드 바이트 값에 의해 정렬이 엄격하게 수행됩니다.
추가로 SQL 표준 콜라이트 이름UCS_BASIC
인코딩에 사용할 수 있습니다UTF8
. 에 해당합니다.C
그리고 유니 코드 코드 포인트별로 정렬합니다.
운영 체제가 단일 프로그램 내에서 여러 로케일을 사용하도록 지원하는 경우 (Newlocale
및 관련 함수) 또는 ICU에 대한 지원이 구성되면 데이터베이스 클러스터가 초기화되면initdb
시스템 카탈로그를 채 웁니다PG_토토 베이
당시 운영 체제에서 찾은 모든 로케일을 기반으로 한 콜라이트와 함께.
현재 사용 가능한 로케일을 검사하려면 쿼리를 사용하십시오선택 *에서 pg_토토 베이
또는 명령\ dos+
inPSQL.
예를 들어, 운영 체제는라는 로케일을 제공 할 수 있습니다.de_de.utf8
. initdb
|de_de.utf8
인코딩 용UTF8
두 가지 모두LC_COLLATE
andLC_CTYPE
설정de_de.utf8
. 또한와의 콜레이션도 생성 할 것입니다..utf8
태그 이름을 제거했습니다. 그래서 당신은 또한 이름으로 콜레이션을 사용할 수 있습니다de_de
, 글을 쓰는 것이 덜 번거 롭고 인코딩에 의존하는 이름을 덜 만듭니다. 그럼에도 불구하고 초기 콜레이션 이름 세트는 플랫폼 의존적입니다.
|LIBC
운영 체제에 설치된 로케일에 직접지도를 사용하여 명령을 사용하여 나열 할 수 있습니다로케일 -A
. 경우 ALIBC
다른 값이 다른 콜라이트가 필요합니다LC_COLLATE
andLC_CTYPE
또는 데이터베이스 시스템이 초기화 된 후 운영 체제에 새 로컬이 설치되면을 사용하여 새로운 콜레이션을 만들 수 있습니다.콜라이트 만들기명령. 새로운 운영 체제 로케일은를 사용하여 대량으로 가져올 수 있습니다.pg_import_system_토토 베이s ()
기능.
특정 데이터베이스 내에서 해당 데이터베이스의 인코딩을 사용하는 콜라이트 만 관심이 있습니다. 의 다른 항목PG_토토 베이
무시됩니다. 따라서와 같은 제거 된 콜라이트 이름de_de
는 전 세계적으로 고유하지 않더라도 주어진 데이터베이스 내에서 고유 한 것으로 간주 될 수 있습니다. 박탈 된 콜레이션 이름을 사용하는 것이 좋습니다. 다른 데이터베이스 인코딩으로 변경하기로 결정한 경우 변경해야 할 것이 하나 더 적기 때문입니다.기본값
, C
및posix
데이터베이스 인코딩에 관계없이 토토 베이s를 사용할 수 있습니다.
PostgreSQL동일한 속성이있는 경우에도 별개의 콜레이션 객체를 호환되지 않는 것으로 간주합니다. 예를 들어,
A A Collate "C"에도 불구하고 오류가 발생합니다.
C
andposix
토토 베이s는 동일한 동작을 가지고 있습니다. 믹싱 스트리핑 및 스트립이없는 콜라이트 이름은 권장되지 않습니다.
ICU를 사용하면 가능한 모든 로케일 이름을 열거하는 것이 합리적이지 않습니다. ICU는 로케일에 특정 이름 지정 시스템을 사용하지만 실제로 별개의 로케일보다 로케일의 이름을 지정하는 더 많은 방법이 있습니다.initdb
ICU API를 사용하여 초기 콜라이트 세트를 채우기 위해 별개의 로케일 세트를 추출합니다. ICU가 제공하는 콜라이트는 SQL 환경에서 BCP 47 언어 태그 형식의 이름을 가진 SQL 환경에서 생성됩니다.“개인 사용”Extension-X-ICU
LIBC 지역과 구별하기 위해 추가되었습니다.
다음은 작성 될 수있는 몇 가지 예제 콜로레이션입니다.
de-x-icu
독일어 콜레이션, 기본 변형
de-at-x-icu
오스트리아 독일 콜라이트, 기본 변형
(또한,de-de-x-icu
또는de-ch-x-icu
, 그러나이 글을 쓰는 시점에서 그들은에 해당합니다.de-x-icu
.)
UND-X-ICU
(for“정의되지 않은”)ICU“루트”토토 베이. 이것을 사용하여 합리적인 언어에 대한 정렬 순서를 얻으십시오.
일부 (자주 사용되지 않은) 인코딩은 ICU에서 지원되지 않습니다. 데이터베이스 인코딩이 이러한 중 하나 인 경우 ICU Collation 항목 중 하나입니다.PG_토토 베이
무시됩니다. 하나를 사용하려고 시도하면 라인을 따라 오류가 발생합니다.“"win874"를 인코딩하기위한 "de-x-icu"는 존재하지 않습니다”.
표준 및 사전 정의 된 콜로레이션이 충분하지 않은 경우 사용자는 SQL 명령을 사용하여 고유 한 콜레이션 객체를 만들 수 있습니다콜라이트 만들기.
표준 및 사전 정의 된 콜라주는 스키마에 있습니다PG_CATALOG
, 모든 사전 정의 된 객체와 마찬가지로. 사용자 정의 콜라이트는 사용자 스키마에서 작성해야합니다.pg_dump
.
새로운 LIBC 콜라이트를 만들 수 있습니다.
Crome Collation German (제공자 = libc, locale = 'de_de');
로케일
이 명령의 절은 운영 체제에 따라 다릅니다. 유닉스와 같은 시스템에서 명령로케일 -A
목록을 표시합니다.
사전 정의 된 LIBC 콜라주는 이미 데이터베이스 인스턴스가 초기화 될 때 운영 체제에 정의 된 모든 콜라이트를 이미 포함하므로 새 제품을 수동으로 만들 필요는 없습니다. 다른 명명 시스템이 원하는 경우 이유가있을 수 있습니다 (이 경우 참조섹션 23.2.2.3.3) 또는 운영 체제가 새로운 로케일 정의를 제공하기 위해 업그레이드 된 경우 (이 경우 참조pg_import_system_토토 베이s ()
).
ICU는 기본 언어+국가 세트를 넘어서 콜라이트를 사용자 정의 할 수 있습니다.initdb
. 사용자는 요구 사항에 대한 분류 행동에 맞게 이러한 시설을 사용하는 자체 콜레이션 객체를 정의하는 것이 좋습니다.로케일andICUICU 로케일 이름 지정에 대한 정보. 허용 가능한 이름과 속성 세트는 특정 ICU 버전에 따라 다릅니다.
여기 몇 가지 예가 있습니다.
"de-u-co-phonebk-x-icu"(제공자 = ICU, locale = 'de-u-co-phonebk'); Collation Collation 작성
COLLE COLLATION "DE-U-CO-PHONEBK-X-ICU"(제공자 = ICU, locale = 'de@collation = phonebook');
전화 번호부 통합 유형과 함께 독일어 콜라이트
첫 번째 예제는 a를 사용하여 ICU 로케일을 선택합니다.“언어 태그”BCP 47에 따라 두 번째 예제는 기존 ICU 특정 로케일 구문을 사용합니다. 첫 번째 스타일은 앞으로 선호되지만 이전 ICU 버전에서는 지원되지 않습니다.
SQL 환경에서 토토 베이 Objects를 원하는 모든 것을 지정할 수 있습니다. 이 예에서, 우리는 사전 정의 된 콜레이션이 사용하는 이름 지정 스타일을 따르며, 이는 BCP 47을 따르지만 사용자 정의 콜라주에는 필요하지 않습니다..
"und-u-co-emoji-x-icu"(제공자 = ICU, locale = 'und-u-co-emoji'); Collation Collation 작성
collation collation "und-u-co-emoji-x-icu"(제공자 = ICU, locale = '@collation = emoji');
유니 코드 기술 표준 #51 당 이모티콘 콜레이션 유형과의 루트 콜레이션
기존 ICU 로케일 이름 지정 시스템에서 루트 로케일이 빈 문자열로 선택되는 방법을 관찰하십시오.
Collation Latinlast 만들기 (제공자 = ICU, locale = 'en-u-kr-grek-latn');
Collation Latinlast 만들기 (제공자 = ICU, locale = 'en@colreorder = grek-latn');
라틴어 편지 앞에 그리스 문자를 분류하십시오. (기본값은 그리스 전 라틴어입니다.)
Collection Collation Collation Upperfirst (제공자 = ICU, locale = 'en-u-kf-upper');
Collect Collation Upperfirst (제공자 = ICU, locale = 'en@colcasefirst = super');
소문자 문자 앞에 상단 문자를 정렬하십시오. (기본값은 먼저 소문자 문자입니다.)
CREATE COLLATION SPECICAL (제공자 = ICU, locale = 'en-u-kf-upper-kr-grek-latn');
Crome Collation Special (제공자 = ICU, locale = 'en@colcasefirst = 상단; colreorder = grek-latn');
위의 옵션을 모두 결합합니다.
CLEATE COLLATION NUMERIC (제공자 = ICU, locale = 'en-u-kn-true');
Collation Collation Numeric (제공자 = ICU, locale = 'en@colnumeric = 예');
숫자 순서, 숫자 값으로 숫자 시퀀스를 정렬합니다.A-21
< A-123
(자연 정렬이라고도 함).
참조유니 코드 기술 표준 #35andBCP 47자세한 내용. 가능한 토토 베이 유형 목록 (CO
서브 타그)에서 찾을 수 있습니다CLDR 저장소.
이 시스템은 콜라이트를 생성 할 수 있지만“사례 무시”또는“악센트 무시”또는 이와 유사한 ( 사용KS
key), 그러한 콜라이트가 진정으로 사례 또는 악센트에 민감하지 않은 방식으로 행동하려면도 선언해야합니다.결정 론in콜라이트 만들기
; 보다섹션 23.2.2.4. 그렇지 않으면, 토토 베이에 따라 동일하지만 바이트와 동일하지 않은 문자열은 바이트 값에 따라 정렬됩니다.
디자인에 의해 ICU는 문서에 설명 된 폴백 절차를 사용하여 거의 모든 문자열을 로케일 이름으로 허용하고 제공 할 수있는 가장 가까운 로케일과 일치시킵니다. 따라서 주어진 ICU 설치가 실제로 지원하지 않는 기능을 사용하여 Collation 사양을 구성하는 경우 직접적인 피드백이 없습니다.
명령콜라이트 만들기는 또한 기존 콜레이션에서 새로운 콜레이션을 만드는 데 사용될 수 있으며, 이는 응용 프로그램에서 운영-시스템 독립적 인 Collation 이름을 사용하거나 호환성 이름을 작성하거나보다 읽기 쉬운 이름으로 ICU- 처리 된 Collation을 사용할 수있는 데 유용 할 수 있습니다. 예를 들어:
"de_de"에서 Collation German 만들기;
콜레이션은입니다.결정 론또는비 결정적. 결정 론적 협력은 결정 론적 비교를 사용합니다. 즉, 문자열이 동일한 바이트 시퀀스로 구성된 경우에만 문자열이 동일하다고 간주합니다.유니 코드 기술 표준 10용어에 대한 자세한 내용은
비 결정적 협력을 만들려면 속성을 지정결정 론적 = 거짓
to콜라이트 만들기
, 예 :
CLEATE COLLATION NDCOLL (제공자 = ICU, locale = 'und', deginistic = false);
이 예제는 표준 유니 코드 콜레이션을 비 결정적 방식으로 사용합니다. 특히, 이것은 다른 정상 형태의 문자열을 올바르게 비교할 수있게한다.
COLLATION CASE_INSENSENSITIVE (제공자 = ICU, locale = 'und-u-ks-level2', dectinistic = false);
모든 표준 및 사전 정의 된 콜라이트는 결정적이며 모든 사용자 정의 콜라주는 기본적으로 결정적입니다. 비 결정적 콜라테이션은 더 많은 것을 제공하는 동안“정확한”행동, 특히 유니 코드의 완전한 힘과 많은 특별한 경우를 고려할 때도 몇 가지 단점이 있습니다. 가장 중요하게도, 그들의 사용은 성과 페널티로 이어집니다.
다른 유니 코드 정규화 양식에서 텍스트를 처리하려면 함수/표현식을 사용하는 옵션이기도합니다정상화
and정규화
비 결정적 콜라주를 사용하는 대신 문자열을 사전 처리하거나 확인합니다. 각 접근 방식마다 다른 트레이드 오프가 있습니다.
문서에 올바른 것이 없으면 일치하지 않습니다.이 양식문서 문제를보고하려면