23.1. 토토 캔 지원#

토토 캔지원은 알파벳, 정렬, 숫자 서식 등과 관련된 문화적 선호를 존중하는 애플리케이션을 의미합니다.포스트그레SQL표준 ISO C를 사용하며POSIX서버 운영 체제에서 제공하는 토토 캔 기능입니다. 추가 정보는 시스템 설명서를 참조하세요.

23.1.1. 개요#

다음을 사용하여 데이터베이스 클러스터가 생성되면 토토 캔 지원이 자동으로 초기화됩니다.initdb. initdb기본적으로 실행 환경의 토토 캔 설정을 사용하여 데이터베이스 클러스터를 초기화하므로 시스템이 이미 데이터베이스 클러스터에서 원하는 토토 캔을 사용하도록 설정되어 있으면 별도로 수행할 작업이 없습니다. 다른 토토 캔을 사용하려는 경우(또는 시스템이 어떤 토토 캔로 설정되어 있는지 확실하지 않은 경우) 지시할 수 있습니다.initdb정확히 어떤 토토 캔을 지정하여 사용할지--토토 캔옵션. 예를 들어:

initdb --locale=sv_SE

Unix 시스템에 대한 이 예는 토토 캔을 스웨덴어로 설정합니다(sv) 스웨덴에서 사용됨(SE). 다른 가능성은 다음과 같습니다.en_US(미국 영어) 및fr_CA(프랑스계 캐나다인). 하나의 로캘에 두 개 이상의 문자 집합을 사용할 수 있는 경우 사양은 다음 형식을 취할 수 있습니다.언어_territory.codeset. 예를 들어,fr_BE.utf-8벨기에(BE)에서 사용되는 프랑스어(fr)를 나타냅니다.utf-8문자 집합 인코딩.

시스템에서 어떤 이름으로 사용할 수 있는 토토 캔은 운영 체제 공급업체에서 제공한 내용과 설치된 내용에 따라 다릅니다. 대부분의 Unix 시스템에서는 다음 명령을 사용합니다.토토 캔 -a사용 가능한 토토 캔 목록을 제공합니다. Windows는 다음과 같이 더 자세한 토토 캔 이름을 사용합니다.독일어_독일또는Swedish_Sweden.1252, 하지만 원칙은 동일합니다.

때로는 여러 토토 캔의 규칙을 혼합하는 것이 유용합니다(예: 영어 대조 규칙을 사용하고 스페인어 메시지를 사용함). 이를 지원하기 위해 현지화 규칙의 특정 측면만 제어하는 ​​로캘 하위 범주 집합이 존재합니다.

LC_COLLATE 문자열 정렬 순서
LC_CTYPE 문자 분류(문자란 무엇입니까? 대문자에 해당합니까?)
LC_MESSAGES 메시지 언어
LC_MONETARY 통화 금액 형식
LC_NUMERIC 숫자 형식 지정
LC_TIME 날짜 및 시간 형식

카테고리 이름은 다음의 이름으로 번역됩니다.initdb특정 카테고리에 대한 토토 캔 선택을 대체하는 옵션. 예를 들어 토토 캔을 캐나다 프랑스어로 설정하고 통화 형식 지정에 미국 규칙을 사용하려면initdb --locale=fr_CA --lc-monetary=en_US.

시스템이 토토 캔 지원이 없는 것처럼 작동하도록 하려면 특수 토토 캔 이름을 사용하십시오.C또는 이에 상응하는 수준POSIX.

일부 토토 캔 카테고리는 데이터베이스가 생성될 때 해당 값을 고정해야 합니다. 데이터베이스마다 다른 설정을 사용할 수 있지만 데이터베이스가 생성되면 더 이상 해당 데이터베이스에 대해 설정을 변경할 수 없습니다.LC_COLLATE그리고LC_CTYPE이 카테고리입니다. 이는 인덱스의 정렬 순서에 영향을 미치므로 고정된 상태로 유지해야 합니다. 그렇지 않으면 텍스트 열의 인덱스가 손상됩니다. (그러나 에서 설명한 대로 데이터 정렬을 사용하면 이 제한을 완화할 수 있습니다.섹션 23.2.) 이러한 범주의 기본값은 다음 경우에 결정됩니다.initdb이 실행되고 해당 값은 새 데이터베이스가 생성될 때 사용됩니다.데이터베이스 생성명령.

다른 토토 캔 카테고리는 토토 캔 카테고리와 동일한 이름을 가진 서버 구성 매개변수를 설정하여 원할 때마다 변경할 수 있습니다(참조섹션 19.11.2자세한 내용). 에 의해 선택되는 값initdb실제로는 구성 파일에만 기록됩니다.postgresql.conf서버가 시작될 때 기본값으로 사용됩니다. 다음에서 이러한 할당을 제거하는 경우postgresql.conf그러면 서버는 실행 환경에서 설정을 상속받습니다.

서버의 토토 캔 동작은 클라이언트의 환경이 아니라 서버가 보는 환경 변수에 의해 결정됩니다. 따라서 서버를 시작하기 전에 올바른 토토 캔 설정을 구성하도록 주의하십시오. 그 결과 클라이언트와 서버가 서로 다른 토토 캔로 설정된 경우 메시지가 원래 위치에 따라 다른 언어로 표시될 수 있습니다.

참고

실행 환경에서 토토 캔 상속에 대해 말할 때 이는 대부분의 운영 체제에서 다음을 의미합니다. 주어진 토토 캔 범주(예: 대조)에 대해 다음 환경 변수는 설정될 때까지 이 순서로 참조됩니다.LC_ALL, LC_COLLATE(또는 해당 카테고리에 해당하는 변수),. 이러한 환경 변수가 설정되지 않은 경우 토토 캔의 기본값은C.

일부 메시지 현지화 라이브러리도 환경 변수를 확인합니다.언어메시지 언어 설정을 위해 다른 모든 토토 캔 설정을 무시합니다. 확실하지 않은 경우 운영 체제 설명서, 특히 다음에 대한 설명서를 참조하십시오.gettext.

메시지가 사용자가 선호하는 언어로 번역되도록 하려면,NLS빌드 시 선택되어 있어야 합니다(구성 --enable-nls). 다른 모든 토토 캔 지원은 자동으로 내장되어 있습니다.

23.1.2. 행동#

토토 캔 설정은 다음 SQL 기능에 영향을 미칩니다:

  • 다음을 사용하여 쿼리 정렬 순서주문 기준또는 텍스트 데이터의 표준 비교 연산자

  • 상부, 하위initcap함수

  • 패턴 일치 연산자(좋아요, 유사함및 POSIX 스타일 정규 표현식); 토토 캔은 대소문자를 구분하지 않는 일치와 문자 클래스 정규식에 의한 문자 분류에 모두 영향을 미칩니다.

  • to_char함수 계열

  • 색인을 사용하는 기능좋아요

이외의 토토 캔을 사용할 때의 단점C또는POSIXin포스트그레SQL성능에 영향을 미칩니다. 문자 처리 속도가 느려지고 일반 인덱스가 사용되는 것을 방지합니다.좋아요. 이러한 이유로 실제로 필요한 경우에만 토토 캔을 사용하십시오.

허용하는 해결 방법으로포스트그레SQL색인을 사용하다좋아요19959_20169PostgreSQL : 문서 : 17 : 11.10. 토토 결과 수업 및 토토 결과 가족더 많은 정보를 원하시면. 또 다른 접근 방식은 다음을 사용하여 인덱스를 만드는 것입니다.C조합, 논의된 대로PostgreSQL : 문서 : 17 : 23.2. 메이저 토토 사이트 Support.

23.1.3. 토토 캔 선택#

로캘은 요구 사항에 따라 다양한 범위에서 선택할 수 있습니다. 위의 개요에서는 다음을 사용하여 토토 캔을 지정하는 방법을 보여주었습니다.initdb전체 클러스터에 대한 기본값을 설정합니다. 다음 목록은 로캘을 선택할 수 있는 위치를 보여줍니다. 각 항목은 후속 항목에 대한 기본값을 제공하며, 각 하위 항목을 사용하면 더 세밀하게 기본값을 재정의할 수 있습니다.

  1. 위에 설명된 바와 같이 운영 체제 환경은 새로 초기화된 데이터베이스 클러스터의 토토 캔에 대한 기본값을 제공합니다. 대부분의 경우 이것으로 충분합니다. 기본적으로 운영 체제가 원하는 언어/지역에 맞게 구성된 경우PostgreSQL또한 해당 토토 캔에 따라 작동합니다.

  2. 위에 표시된 대로 다음 명령줄 옵션은initdb새로 초기화된 데이터베이스 클러스터에 대한 토토 캔 설정을 지정합니다. 운영 체제에 데이터베이스 시스템에 대해 원하는 토토 캔 구성이 없는 경우 이를 사용하십시오.

  3. 토토 캔은 각 데이터베이스에 대해 별도로 선택할 수 있습니다. SQL 명령데이터베이스 생성및 이에 상응하는 명령줄생성된 DB에 대한 옵션이 있습니다. 예를 들어 데이터베이스 클러스터에 요구 사항이 서로 다른 여러 테넌트에 대한 데이터베이스가 있는 경우 이 방법을 사용하세요.

  4. 개별 테이블 열에 대해 로캘 설정을 지정할 수 있습니다. 이는라는 SQL 개체를 사용합니다.조합다음에 설명되어 있습니다.PostgreSQL : 문서 : 17 : 23.2. 메이저 토토 사이트 Support. 예를 들어 이를 사용하여 다양한 언어로 데이터를 정렬하거나 특정 테이블의 정렬 순서를 맞춤설정할 수 있습니다.

  5. 마지막으로 개별 쿼리에 대해 토토 캔을 선택할 수 있습니다. 이번에도 SQL 데이터 정렬 개체를 사용합니다. 이는 런타임 선택에 따라 또는 임시 실험을 위해 정렬 순서를 변경하는 데 사용될 수 있습니다.

23.1.4. 토토 캔 제공자#

토토 캔 공급자는 대조 및 문자 분류에 대한 토토 캔 동작을 정의하는 라이브러리를 지정합니다.

위에 설명된 대로 토토 캔 설정을 선택하는 명령과 도구에는 각각 토토 캔 제공자를 선택하는 옵션이 있습니다. 다음은 ICU 공급자를 사용하여 데이터베이스 클러스터를 초기화하는 예입니다.

initdb --locale-provider=icu --icu-locale=en

자세한 내용은 각 명령 및 프로그램 설명을 참조하세요. 예를 들어 다음과 같이 다양한 세부사항에서 로캘 공급자를 혼합할 수 있습니다.libc기본적으로 클러스터에 대한 것이지만 다음을 사용하는 하나의 데이터베이스가 있습니다.icu공급자, 그런 다음 해당 데이터베이스 내에서 공급자 중 하나를 사용하여 대조 개체를 갖습니다.

토토 캔 공급자에 관계없이 운영 체제는 여전히 메시지와 같은 일부 토토 캔 인식 동작을 제공하는 데 사용됩니다(참조lc_messages).

사용 가능한 토토 캔 제공자는 아래에 나열되어 있습니다:

내장

내장공급자는 내장된 작업을 사용합니다. 오직C그리고C.utf-8이 공급자는 토토 캔을 지원합니다.

C토토 캔 동작은 다음과 동일합니다Clibc 공급자의 토토 캔. 이 토토 캔을 사용할 때 동작은 데이터베이스 인코딩에 따라 달라질 수 있습니다.

C.utf-8토토 캔은 데이터베이스 인코딩이 다음과 같은 경우에만 사용할 수 있습니다.utf-8, 동작은 유니코드를 기반으로 합니다. 데이터 정렬에서는 코드 포인트 값만 사용합니다. 정규식 문자 클래스는 "POSIX 호환" 의미 체계를 기반으로 하며 대소문자 매핑은 "단순" 변형입니다.

icu

icu공급자가 외부 ICU를 사용함도서관.PostgreSQL지원이 구성되어 있어야 합니다.

ICU는 운영 체제 및 데이터베이스 인코딩과 무관한 대조 및 문자 분류 동작을 제공합니다. 이는 결과 변경 없이 다른 플랫폼으로 전환하려는 경우에 바람직합니다.LC_COLLATE그리고LC_CTYPEICU 토토 캔과 독립적으로 설정할 수 있습니다.

참고

ICU 제공자의 경우 결과는 사용된 ICU 라이브러리 버전에 따라 달라질 수 있습니다. 이는 시간이 지남에 따라 자연어의 변화를 반영하도록 업데이트되기 때문입니다.

libc

libc공급자는 운영 체제의 C 라이브러리를 사용합니다. 데이터 정렬 및 문자 분류 동작은 설정에 의해 제어됩니다.LC_COLLATE그리고LC_CTYPE이므로 독립적으로 설정할 수 없습니다.

참고

libc 공급자를 사용할 때 동일한 토토 캔 이름이 플랫폼에 따라 다르게 동작할 수 있습니다.

23.1.5. ICU 토토 캔#

23.1.5.1. ICU 토토 캔 이름#

토토 캔 이름의 ICU 형식은 다음과 같습니다.언어 태그.

CREATE COLLATION mycollation1 (제공자 = icu, 토토 캔 = 'ja-JP');
COLLATION 생성 mycollation2(공급자 = icu, 토토 캔 = 'fr');

23.1.5.2. 로캘 정규화 및 유효성 검사#

ICU를 공급자로 사용하여 새 ICU 데이터 정렬 개체 또는 데이터베이스를 정의할 때 해당 토토 캔 이름이 아직 해당 형식이 아닌 경우 언어 태그로 변환("표준화")됩니다. 예를 들어,

CREATE COLLATION mycollation3 (공급자 = icu, 토토 캔 = 'en-US-u-kn-true');
주의 사항: "en-US-u-kn-true" 토토 캔에 대해 표준 형식 "en-US-u-kn" 사용
CREATE COLLATION mycollation4 (공급자 = icu, 토토 캔 = 'de_DE.utf8');
주의사항: 토토 캔 "de_DE.utf8"에 대해 표준 형식 "de-DE" 사용

이 알림이 표시되면 다음을 확인하세요.공급자그리고토토 캔예상된 결과입니다. ICU 제공자를 사용할 때 일관된 결과를 얻으려면 표준을 지정하세요.언어 태그변환에 의존하는 대신.

언어 이름이 없는 토토 캔 또는 특수 언어 이름루트, 다음 언어를 갖도록 변환됩니다.und("정의되지 않음").

ICU는 ICU로 더 쉽게 전환할 수 있도록 대부분의 libc 토토 캔 이름과 일부 다른 형식을 언어 태그로 변환할 수 있습니다. libc 토토 캔 이름이 ICU에서 사용되는 경우 libc에서와 정확히 동일한 동작을 갖지 않을 수 있습니다.

토토 캔 이름을 해석하는 데 문제가 있거나 토토 캔 이름이 ICU가 인식하지 못하는 언어나 지역을 나타내는 경우 다음 경고가 표시됩니다.

CREATE COLLATION 넌센스(제공자 = icu, 토토 캔 = '넌센스');
경고: ICU 토토 캔 "nonsense"에는 알 수 없는 언어 "nonsense"가 있습니다.
힌트: ICU 로캘 유효성 검사를 비활성화하려면 icu_validation_level 매개변수를 DISABLED로 설정하세요.
콜레이션 생성

icu_validation_level메시지 보고 방법을 제어합니다. 로 설정되지 않은 경우오류, 대조는 계속 생성되지만 동작은 사용자가 의도한 것과 다를 수 있습니다.

23.1.5.3. 언어 태그#

BCP 47에 정의된 언어 태그는 언어, 지역 및 토토 캔에 대한 기타 정보를 식별하는 데 사용되는 표준화된 식별자입니다.

기본 언어 태그는 간단합니다.언어-지역; 아니면 그냥언어. 그만큼언어는 언어 코드입니다(예:fr프랑스어의 경우) 및지역은 지역 코드입니다(예:캘리포니아캐나다의 경우). 예:ja-JP, 또는fr-CA.

조합 설정은 언어 태그에 포함되어 조합 동작을 사용자 정의할 수 있습니다. ICU는 악센트, 대소문자 및 구두점에 대한 민감도(또는 둔감도)와 같은 광범위한 사용자 정의를 허용합니다. 텍스트 내의 숫자 처리; 다양한 용도를 만족시키는 기타 다양한 옵션이 있습니다.

이 추가 조합 정보를 언어 태그에 포함하려면 추가하세요-u, 이는 추가 대조 설정이 있고 그 뒤에 하나 이상이 있음을 나타냅니다.--쌍. 그만큼a의 열쇠입니다콜레이션 설정그리고은 해당 설정에 유효한 값입니다. 부울 설정의 경우,-해당 항목 없이 지정할 수 있습니다.-, 이는 값을 의미합니다..

예를 들어, 언어 태그en-US-u-kn-ks-level2데이터 정렬 설정이 있는 미국 지역의 영어 토토 캔을 의미kn다음으로 설정됨그리고ks다음으로 설정됨레벨2. 이러한 설정은 대조가 대소문자를 구분하지 않고 일련의 숫자를 단일 숫자로 처리함을 의미합니다.

CREATE COLLATION mycollation5(공급자 = icu, 결정적 = false, 토토 캔 = 'en-US-u-kn-ks-level2');
SELECT 'aB' = 'Ab' COLLATE mycollation5를 결과로;
 결과
--------
 티
(1줄)

결과로 SELECT 'N-45' < 'N-123' COLLATE mycollation5;
 결과
--------
 티
(1행)

참조섹션 23.2.3토토 캔에 대한 사용자 정의 조합 정보와 함께 언어 태그를 사용하는 자세한 내용 및 추가 예를 확인하세요.

23.1.6. 문제#

토토 캔 지원이 위의 설명에 따라 작동하지 않으면 운영 체제의 토토 캔 지원이 올바르게 구성되었는지 확인하십시오. 시스템에 어떤 토토 캔이 설치되어 있는지 확인하려면 다음 명령을 사용할 수 있습니다.토토 캔 -a운영 체제에서 제공하는 경우.

확인해 보세요PostgreSQL실제로는 귀하가 생각하는 토토 캔을 사용하고 있습니다. 그만큼LC_COLLATE그리고LC_CTYPE설정은 데이터베이스가 생성될 때 결정되며 새 데이터베이스를 생성하는 경우를 제외하고는 변경할 수 없습니다. 다음을 포함한 기타 토토 캔 설정LC_MESSAGES그리고LC_MONETARY처음에는 서버가 시작된 환경에 따라 결정되지만 즉시 변경될 수 있습니다. 다음을 사용하여 활성 토토 캔 설정을 확인할 수 있습니다.표시명령.

디렉토리src/테스트/토토 캔소스 배포판에는 다음에 대한 테스트 스위트가 포함되어 있습니다.PostgreSQL의 로캘 지원.

오류 메시지 텍스트를 분석하여 서버측 오류를 처리하는 클라이언트 응용 프로그램은 서버의 메시지가 다른 언어로 되어 있는 경우 분명히 문제가 있습니다. 이러한 애플리케이션의 작성자는 대신 오류 코드 구성표를 사용하는 것이 좋습니다.

메시지 번역 카탈로그를 유지하려면 번역을 보고 싶어하는 많은 자원봉사자들의 지속적인 노력이 필요합니다.PostgreSQL자신이 선호하는 언어를 잘 구사합니다. 귀하의 언어로 된 메시지가 현재 제공되지 않거나 완전히 번역되지 않은 경우 귀하의 도움을 주시면 감사하겠습니다. 도움을 주고 싶으시다면 다음을 참조하세요.사설 토토 사이트 : 문서 : 17 : 55 장 모국어 지원또는 개발자 메일링 리스트에 글을 쓰세요.

수정 사항 제출

문서에 올바르지 않은 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 경험이 있거나 추가 설명이 필요한 경우 이용해주세요이 양식문서 문제를 보고합니다.