CREATE TRANSFORM

CREATE TRANSFORM — 새 transform 정의

요약

CREATE [ OR REPLACE ] TRANSFORM FOR 자료형이름 LANGUAGE 언어이름 (
    FROM SQL WITH FUNCTION from_sql_function_name [ (argument_type [, ...]) ],
    TO SQL WITH FUNCTION to_sql_function_name [ (argument_type [, ...]) ]
);

설명

CREATE TRANSFORM 명령은 새 transform을 만든다. CREATE OR REPLACE TRANSFORM 명령은 새 transform을 만들거나, 해당 transform이 있다면 그 정의를 바꾼다.

transform은 데이터베이스 자료형과 프로시져 언어 사이 연결하는 일을 한다. 예를 들어, hstore 자료형을 PL/Python에서 사용할 때, 그 자료형을 Python 환경에서 어떤 자료형으로 써야 할 것인지를 정의할 수 없다. 기본적으로는 문자열로 일단 넘겨서 다시, 적당한 자료형 변환을 해서 사용했다. 이런 비효율성을 개선하기 위해 transform을 만든다. 예를 들어, 키 이름이 있는 배열, 리스트 자료형 처리를 보다 쉽게 할 수 있게 된다.

하나의 transform에는 두 개의 내부 함수를 지정한다:

  • SQL 환경에서 해당 언어 환경으로 자료형이 전달 될 때 사용할 from SQL 함수. 이 함수는 그 언어로 작성된 함수의 입력 인자 자료형을 처리할 때 사용된다.

  • 해당 언어 환경에서 SQL 환경으로 자료형이 전달 될 때 사용할 to SQL 함수. 이 함수는 그 언어로 작성된 함수의 반환 자료형을 처리할 때 사용된다.

반드시 이 두 함수 모두를 지정할 필요는 없다. 어느 한 쪽을 지정하지 않으면, 언어 별 기본 작동 방식에 따라 의미로 형변환을 할 수도 있다. (한 방향으로만 전환하는 transform을 만들 때는, 역방향에서 사용할 함수가 항상 오류가 나도록 만들어 등록하면 된다.)

transform을 만드려면, 해당 자료형과 해당 언어에 대한 소유주 이거나, USAGE 권한이 있어야 한다. 또한 지정하는 from-SQL, to-SQL 함수에 대해서, EXECUTE 권한도 있어야 한다.

매개 변수

자료형이름

해당 transform에서 처리하는 자료형 이름.

lang_name

해당 transform에서 처리하는 언어 이름.

from_sql_function_name[(argument_type [, ...])]

SQL에서 해당 언어로 만들어지는 함수 쪽으로 넘길 대 사용하는 전환 함수. 이 함수의 입력 인자는 internal, 반환 자료형도 internal로 구성한다. 실재 인자 값을 해당 자료형으로 쓸 수 있도록 이 함수 내부에서 코딩해야 한다. (SQL 레벨에서는 입력도 출력도 모두 하나의 internal 형으로 정의해야 한다.) 이 함수의 실 반환 자료형은 그 언어에서 쓸 실재 자료형이 된다. 인자 목록을 지정하지 않고, 함수 이름만 지정한다면, 그 함수는 해당 스키마 안에 하나만 있어야 한다.

to_sql_function_name[(argument_type [, ...])]

해당 언어로 만들어지는 함수 내부에서 사용한 해당 자료형을 SQL 쪽으로 반환할 때 사용할 함수. 이 함수의 반환 자료형은 internal 이어야 하며, 그 값은 SQL에서 사용할 해당 자료형이어야 한다. 실재 인자 값은 해당 언어에 처리하는 특정한 것이여야 한다. 이 함수의 인자를 지정하지 않고, 이름을 지정한다면, 그 함수는 해당 스키마 안에 하나만 있어야 한다.

참고

transform을 삭제할 때는 DROP TRANSFORM 명령을 사용한다.

예제

hstore 자료형과 plpythonu 언어 사이 transform을 만드려면, 먼저 각각 등록한다:

CREATE TYPE hstore ...;

CREATE EXTENSION plpythonu;

다음 전환 함수를 등록한다:

CREATE FUNCTION hstore_to_plpython(val internal) RETURNS internal
LANGUAGE C STRICT IMMUTABLE
AS ...;

CREATE FUNCTION plpython_to_hstore(val internal) RETURNS hstore
LANGUAGE C STRICT IMMUTABLE
AS ...;

마지막으로 이들을 이용해서 transform을 만든다.

CREATE TRANSFORM FOR hstore LANGUAGE plpythonu (
    FROM SQL WITH FUNCTION hstore_to_plpython(internal),
    TO SQL WITH FUNCTION plpython_to_hstore(internal)
);

이 일련의 작업들은 확장 모듈안에 포함되어 있어, 해당 확장 모듈을 설치하면 된다.

contrib 안에 미리 제공하는 몇 transform 확장 모듈이 있다. 그것으로 예제를 살펴 볼 수 있다.

호환성

CREATE TRANSFORM 명령은 PostgreSQL 확장 기능이다. CREATE TRANSFORM 명령이 SQL 표준에 있지만, 클라이언트 언어를 위한 자료형 연결 용도로, PostgreSQL에서는 지원하지 않는다.

관련 항목

CREATE FUNCTION, CREATE LANGUAGE, CREATE TYPE, DROP TRANSFORM