ALTER COLLATION

ALTER COLLATION — 문자정렬규칙 정의 바꾸기

요약

ALTER COLLATION 이름 REFRESH VERSION

ALTER COLLATION 이름 RENAME TO 새이름
ALTER COLLATION 이름 OWNER TO { 새소유주 | CURRENT_USER | SESSION_USER }
ALTER COLLATION 이름 SET SCHEMA 새스키마

설명

ALTER COLLATION 명령은 문자 정렬 규칙의 정의를 바꾼다.

작업 대상 정렬 규칙의 소유주여야 ALTER COLLATION 명령을 사용할 수 있다. 소유주를 바꾸는 경우에는 기존 소유주는 새 소유주의 직간접적으로 구성원이어야 하며, 새 소유주는 해당 스키마에 대해서 CREATE 권한이 있어야 한다. (새 소유주가 해당 정렬 규칙을 삭제 하거나, 새로 만들 수 있도록 하기 위함이다. 슈퍼유저는 이런 제약 없이 소유주를 변경 할 수 있다.)

매개 변수

이름

작업 대상 문자 정렬 규칙 이름(스키마 이름 포함).

새이름

바뀔 새 이름.

새소유주

바뀔 새 소유주 이름.

새스키마

바뀔 새 스키마 이름.

REFRESH VERSION

버전 갱신. 참고에서 자세히 설명함.

참고

ICU 라이브러리에서 제공하는 문자 정렬 규칙을 사용하는 경우, 그 규칙이 처음 만들어질 때, ICU 고유 버전을 각 규칙 별로 시스템 카탈로그에 기록해 둔다. 그리고, 그 규칙을 사용할 때 그 규칙의 ICU 현재 버전과, 시스템 카탈로그에 기록된 버전을 비교하고, 다르면 다음과 같은 경고를 출력한다:

WARNING:  collation "xx-x-icu" has version mismatch
DETAIL:  The collation in the database was created using version 1.2.3.4, but the operating system provides version 2.3.4.5.
HINT:  Rebuild all objects affected by this collation and run ALTER COLLATION pg_catalog."xx-x-icu" REFRESH VERSION, or build PostgreSQL with the right library version.

문자 정렬 규칙의 정의를 바꾸게 되면, 인덱스 손상이나, 기타 다른 문제들이 생길 수 있다. 왜냐하면, 데이터베이스 내 모든 정렬 되는 문자 자료들은 이 정렬 규칙을 사용해서 저장되기 때문이다. 일반적으로 한 번 만든 정렬 규칙을 실무에서 사용하는 경우는 이런 변경 작업을 하지는 않겠지만, 새 ICU 라이브러리를 이용해서 새롭게 만든 서버로 pg_upgrade 명령을 이용해서 업그레이드 하는 경우, 정상적인 상황에서도 일어날 수 있다. 이렇게 된다면, REINDEX 같은 명령을 이용해서 관련 정렬 규칙을 사용하고 있는 모든 개체들을 다시 만들어야 한다. 이 작업이 끝나면, 해당 정렬 규칙 버전을 ALTER COLLATION ... REFRESH VERSION 명령으로 갱신한다. 이렇게 해서 위와 같은 경고를 없앨 수 있다. 윗 경고는 문자 정렬 규칙의 버전이 다르다고 알려주는 것 뿐이지 관련 모든 개체들이 정상적으로 다시 만들어졌는지를 확인하지는 않음을 기억해야 한다.

아래 쿼리는 현재 데이터베이스에서 버전 재 갱신이 필요한 문자 정렬 규칙과 그것을 사용하는 개체들을 찾는데 사용할 수 있다:

SELECT pg_describe_object(refclassid, refobjid, refobjsubid) AS "Collation",
       pg_describe_object(classid, objid, objsubid) AS "Object"
  FROM pg_depend d JOIN pg_collation c
       ON refclassid = 'pg_collation'::regclass AND refobjid = c.oid
  WHERE c.collversion <> pg_collation_actual_version(c.oid)
  ORDER BY 1, 2;

예제

de_DE 정렬 규칙을 german으로 이름 바꿈:

ALTER COLLATION "de_DE" RENAME TO german;

en_US 정렬 규칙의 소유주를 joe 사용자로 바꿈:

ALTER COLLATION "en_US" OWNER TO joe;

호환성

ALTER COLLATION 구문은 표준 SQL 구문이 아니다.

관련 항목

CREATE COLLATION, DROP COLLATION