CREATE COLLATION — 새 문자 정렬 규칙 정의
CREATE COLLATION [ IF NOT EXISTS ]이름
( [ LOCALE =로케일
, ] [ LC_COLLATE =lc_collate
, ] [ LC_CTYPE =lc_ctype
, ] [ PROVIDER =제공자
, ] [ DETERMINISTIC =boolean
, ] [ VERSION =버전
] ) CREATE COLLATION [ IF NOT EXISTS ]이름
FROM기존_문자정렬규칙
CREATE COLLATION
명령은
운영체제 로케일 설정에 지정된 정렬 규칙을 이용하는 새
문자 정렬 규칙을 만들거나, 기존 문자 정렬 규칙을 복사해서
새 문자 정렬 규칙을 만든다.
문자 정렬 규칙을 만드려면, 해당 스키마에 대해서
CREATE
권한이 있어야 한다.
IF NOT EXISTS
지정한 이름의 문자 정렬 규칙이 이미 있어도 오류로 처리하지 않고, 알림 메시지만 보여준다. 이 때 기존 문자 정렬 규칙이 새로 만드려고 하는 정렬 규칙과 정확하게 같은지는 확인하지 않는다.
이름
작업 대상 문자 정렬 규칙 이름. 이 이름에는 스키마 이름도 포함 할 수 있다. 스키마 이름을 지정하지 않으면, 현재 스키마 안에 만들어진다. 이 이름은 해당 스키마 안에서 유일해야 한다. (시스템 카탈로그에는 인코딩이 각기 다른 같은 이름의 문자 정렬 규칙이 있다. 이 경우 사용되는 문자 정렬 규칙은 현재 사용하고 있는 데이터베이스의 인코딩과 같은 것이 사용된다. 그 외의 것은 무시된다.)
로케일
이 설정은 LC_COLLATE
,
LC_CTYPE
설정을 한 번에 하는 간편 설정이다.
이 설정을 하면, 이 개별 설정은 안해도 된다.
lc_collate
로케일의 LC_COLLATE
설정.
lc_ctype
로케일의 LC_CTYPE
설정.
제공자
해당 문자 정렬 규칙과 관련된 로케일 서비스용 제공자를 지정한다.
사용할 수 있는 값:
icu
,
libc
.
libc
가 기본값이다.
OS와 서버 빌드 옵션에 따라 이것을 선택할 수 있다.
DETERMINISTIC
Specifies whether the collation should use deterministic comparisons.
The default is true. A deterministic comparison considers strings that
are not byte-wise equal to be unequal even if they are considered
logically equal by the comparison. PostgreSQL breaks ties using a
byte-wise comparison. Comparison that is not deterministic can make the
collation be, say, case- or accent-insensitive. For that, you need to
choose an appropriate LC_COLLATE
setting
and set the collation to not deterministic here.
Nondeterministic collations are only supported with the ICU provider.
버전
문장 정렬 규칙의 버전 이름(문자열값). 보통 이 옵션은
생략하며, 이렇게 해서 기존 운영체제에서 제공하는
해당 정렬 규칙의 버전을 그대로 사용한다.
이 버전 값은 pg_upgrade
사용할 때,
기본 정렬 규칙을 그대로 사용하기 위해서 그 값을 기록해 둔다.
이 버전에 대해서는 ALTER COLLATION 명령 설명서에서 소개한다.
기존_문자정렬규칙
복사할 원본 기존 문자 정렬 규칙 이름. 만들어질 새 문자 정렬 규칙의 세부 속성은 기존 문자 정렬 규칙의 것을 그대로 따르며, 두 정렬 규칙과 의존 관계는 없다.
CREATE COLLATION
takes a SHARE ROW
EXCLUSIVE
lock, which is self-conflicting, on the
pg_collation
system catalog, so only one
CREATE COLLATION
command can run at a time.
사용자 정의 문자 정렬 규칙은 DROP COLLATION
명령으로
지운다.
문자 정령 규칙을 만드는 방법에 대해서는 23.2.2.3절에서 자세히 소개하고 있다.
특정 libc
문자 정렬 규칙 제공자를 사용할 때는,
그 로케일이 현재 데이터베이스에서 수용 가능해야한다.
이 정확한 규칙은 CREATE DATABASE에서 다루고 있다.
현재 데이터베이스 인코딩이 UTF8
일 때,
fr_FR.utf8
운영체제 로케일을
이용해서 새 로케일을 만드는 경우:
CREATE COLLATION french (locale = 'fr_FR.utf8');
ICU 제공자를 이용해서 독일 전화번호부 정렬 규칙을 만드는 경우:
CREATE COLLATION german_phonebook (provider = icu, locale = 'de-u-co-phonebk');
기존 문자 정렬 규칙에서 새 규칙을 만드는 경우:
CREATE COLLATION german FROM "de_DE";
이 때 사용할 수 있는 기존 문자 정렬 규칙 이름은 데이터베이스 서버가 사용할 수 있는 운영체제 의존적 것이여야 한다.
CREATE COLLATION
구문은 표준 SQL 구문이지만,
표준 SQL은 기존 문자 정렬 규칙을 복사하는 기능만 제공한다.
새 문자 정렬 규칙을 만드는 기능은
PostgreSQL 확장 기능이다.