CREATE EXTENSION

CREATE EXTENSION — 확장 모듈 설치

요약

CREATE EXTENSION [ IF NOT EXISTS ] 확장모듈이름
    [ WITH ] [ SCHEMA 스키마이름 ]
             [ VERSION 버전 ]
             [ CASCADE ]

설명

CREATE EXTENSION 명령은 현재 데이터베이스에 새 확장 모듈을 설치한다. 이미 설치된 같은 이름의 확장 모듈이 없어야 한다.

이 명령을 실행하면, 해당 확장 모듈 설치용 스크립트가 실행된다. 그 스크립트에는 일반적으로 함수, 자료형, 연산자, 인덱스에서 쓰는 접근 방법 같은 SQL 개체들을 만드는 명령어들이 있다. CREATE EXTENSION 명령은 추가로 이렇게 만들어지는 개체들의 OID 값을 기록해 둔다. DROP EXTENSION 명령을 실행 할 때 이 OID 개체들을 지우기 위함이다.

CREATE EXTENSION 명령을 실행하는 사용자는 해당 확장 모듈의 소유주 되며, 그 확장 모듈 소속 모든 개체들의 소유주가 된다.

Loading an extension ordinarily requires the same privileges that would be required to create its component objects. For many extensions this means superuser privileges are needed. However, if the extension is marked trusted in its control file, then it can be installed by any user who has CREATE privilege on the current database. In this case the extension object itself will be owned by the calling user, but the contained objects will be owned by the bootstrap superuser (unless the extension's script explicitly assigns them to the calling user). This configuration gives the calling user the right to drop the extension, but not to modify individual objects within it.

매개 변수

IF NOT EXISTS

이미 해당 확장 모듈이 설치 되어 있어도, 오류로 처리하지 않고 알림 메시지만 보여 준다. 이 옵션은 단지 해당 확장 모들의 이름이 중복 되는지만 검사하지, 정확히 이미 설치된 것과 설치할 것이 같은지는 검사하지는 않는다.

확장모듈이름

설치할 확장 모듈 이름. PostgreSQL 확장 모듈은 SHAREDIR/extension/확장모듈이름.control 파일로 설치 정보가 관리된다. (즉, 이 파일이 있어야 설치할 수 있다. - 옮긴이)

스키마이름

해당 확장 모듈에 속한 개체들을 지정한 스키마에 만든다. 이 이름의 스키마는 이미 있는 것이여야 한다. 이 옵션을 사용하지 않았고, 확장모듈 제어 파일에서 스키마를 지정하지 않았다면, search_path 설정값의 첫번째 스키마 안에 만든다.

SCHEMA 옵션을 사용해서 스키마를 지정했는데, 해당 확장 모듈 제어 파일에도 스키마를 지정했고, 서로 다르다면, 스키마 이름 충돌로 오류 처리된다. 반면, CASCADE 옵션을 추가하면, 이런 경우 스키마이름 설정이 무시된다. 스키마이름을 지정하는 경우는, 일반적으로 해당 확장 모듈이 특정 스키마를 사용하지 않는(지정하지 않았는) 경우에 유용하게 쓰인다.

이 확장 모듈 자체는 어느 스키마에도 속하지 않는다. 이 확장 모듈을 해당 데이터베이스 기준 전역 개체다. 즉 데이터베이스 내 유일해야 한다. 하지만 해당 확장 모듈 소속 개체들은 특정 스키마 안에 만들어진다.

버전

설치할 확장 모듈의 버전을 지정한다. 이 버전 값은 식별자이거나 문자열이다. 이 옵션을 지정하지 않으면, 해당 확장 모듈 제어 파일에서 지정한 기본 버전이 설치된다.

CASCADE

이 옵션을 사용하면 설치하려는 확장 모듈을 사용하기 위해 필요한 상위 확장 모듈들 가운데 아직 설치되지 않은 확장 모들을 재귀적으로 모두 설치한다. 이 때, SCHEMA 옵션이 있으면, 같이 설치되는 모든 확장 모듈에도 SCHEMA 옵션을 적용한다. 그외 다른 옵션들은 이렇게 함께 설치 되는 확장 모듈에는 적용되지 않으며, 버전은 각 확장 모듈의 기본 버전이 설치된다.

참고

CREATE EXTENSION 명령으로 한 확장 모듈 설치하려면, 먼저 그 설치 작업을 어떻게 할지를 지정한 해당 확장 모듈 지원 파일들이 먼저 해당 서버에 있어야 한다. PostgreSQL 확장 모듈을 어떻게 설치하고, 사용하지는에 대한 자세한 이야기는 부가 확장 모듈들에서 소개하고 있다.

사용할 수 있는 확장 모듈의 이름은 pg_available_extensions 뷰에서, 그 모듈의 버전은 pg_available_extension_versions 뷰에서 확인할 수 있다.

경고

Installing an extension as superuser requires trusting that the extension's author wrote the extension installation script in a secure fashion. It is not terribly difficult for a malicious user to create trojan-horse objects that will compromise later execution of a carelessly-written extension script, allowing that user to acquire superuser privileges. However, trojan-horse objects are only hazardous if they are in the search_path during script execution, meaning that they are in the extension's installation target schema or in the schema of some extension it depends on. Therefore, a good rule of thumb when dealing with extensions whose scripts have not been carefully vetted is to install them only into schemas for which CREATE privilege has not been and will not be granted to any untrusted users. Likewise for any extensions they depend on.

The extensions supplied with PostgreSQL are believed to be secure against installation-time attacks of this sort, except for a few that depend on other extensions. As stated in the documentation for those extensions, they should be installed into secure schemas, or installed into the same schemas as the extensions they depend on, or both.

새 확장 모듈을 직접 만들고자 할 때 필요한 정보는 37.17절에서 다룬다.

예제

addons 스키마 안에, hstore 확장 모듈을 설치한다면:

CREATE EXTENSION hstore SCHEMA addons;

다음과 같은 방법으로도 같은 일을 할 수 있다:

SET search_path = addons;
CREATE EXTENSION hstore;

호환성

CREATE EXTENSION 구문은 PostgreSQL 확장 기능이다.

관련 항목

ALTER EXTENSION, DROP EXTENSION