36.12. 사용자 정의 연산자

모든 연산자는 해당 작업을 하는 함수를 호출 하는 "간편 구문, syntactic sugar"이다; 즉 새로운 어떤 연산자를 만들고자 한다면, 먼저 그 일을 하는 함수부터 만들어야 한다. 하지만, 하나의 연산자가 그저 구문을 간편하게 하는 역할만 하지는 않는다. 쿼리 실행 계획기는 그 연산자를 보고 최적화된 실행 계획을 짜기 때문이다. 이것에 대한 설명은 다음 장에서 추가로 설명한다.

PostgreSQL에서는 왼쪽, 오른쪽 단항 연산자와 이항 연산자를 지원한다. 연산자는 오버로드될 수 있다; 같은 연산자인데, 항 개수가 다르거나, 자료형이 다른 여러 연산자가 함께 있을 수 있다. 쿼리가 실행 될 때, 그 연산자와 관계된 항과 자료형에 따라서 해당 연산자가 사용된다.

아래는 두 복소수를 서로 더하는 연산자를 만드는 예제다. 여기서는 이미 complex 자료형이 만들어져 있다고 간주했다(36.11절 참조). 먼저 그 연산을 할 함수를 만들고, 다음 연산자를 만든다:

CREATE FUNCTION complex_add(complex, complex)
    RETURNS complex
    AS 'filename', 'complex_add'
    LANGUAGE C IMMUTABLE STRICT;

CREATE OPERATOR + (
    leftarg = complex,
    rightarg = complex,
    procedure = complex_add,
    commutator = +
);

만들어진 연산자는 다음과 같이 사용할 수 있다:

SELECT (a + b) AS c FROM test_complex;

        c
-----------------
 (5.2,6.05)
 (133.42,144.95)

윗 예제는 이항 연산자를 만들고 사용한 것이다. 단항 연산자를 만들려면 필요 없는 각 항을 생략하면 된다. 왼쪽 단항이면 leftarg 인자를, 오른쪽 단항이면 rightarg 인자를 생략한다. procedure 절과 인자를 지정하는 절이 CREATE OPERATOR 명령에서 필요한 기본 옵션이다. 윗 예제에 있는 commutator 절은 쿼리 최적화기가 최적의 실행 계획을 만드는데 사용된다. 이런 commutator와 같은 쿼리 최적화 여러 옵션들에 대해서는 다음 장에서 다룬다.