CREATE OPERATOR 이름 ( PROCEDURE = 함수이름 [, LEFTARG = 왼쪽자료형 ] [, RIGHTARG = 오른쪽자료형 ] [, COMMUTATOR = 교환연산자 ] [, NEGATOR = 부정연산자 ] [, RESTRICT = restrict함수 ] [, JOIN = join함수 ] [, HASHES ] [, MERGES ] )
CREATE OPERATOR 명령은 지정한 name의 새 연산자를 만든다. 만들어진 연산자의 소유주는 만든 사람이 된다. 연산자 이름 앞에 스키마 이름을 지정하면, 해당 스키마 소속 연산자가 된다. 스키마 이름을 생략하면, 현재 스키마에서 만들어진다.
연산자 이름은 다음 문자들의 집합으로 최대 NAMEDATALEN-1 (기본값 63) 바이트까지 문자열로 구성할 수 있다:
+ - * / < > = ~ ! @ # % ^ & | ` ?
하지만 다음과 같은 연산자는 만들 수 없다-- 또는 /* 형태의 연산자는 구문 주석과 같기 때문에 만들 수 없다.
연산자의 이름이 다음 문자 가운데 하나 이상을 포함하지 않으면, 그 이름으로 + 또는 - 문자로 끝날 수 없다:
~ ! @ # % ^ & | ` ?
예를 들어, @- 연산자 이름을 허용하지만, *- 이름은 허용하지 않는다. 이 제한은 토큰 사이 공백 문자 없이 SQL 구문 분석을 PostgreSQL이 할 수 있도록 하기 위함이다.=> 연산자 이름은 더 이상 사용하지 않는다. 앞으로도 이 연산자는 허용하지 않을 것이다.
!= 연산자는 입력 할 때 <> 연산자로 자동 변환 되기 때문에, 사용자가 != 연산자를 만든다 하더라도, 자동으로 <> 연산자로 바뀐다.
연산자를 만들 때, LEFTARG 값 또는 RIGHTARG 값은 적어도 하나 이상은 지정해야 한다. 이항 연산자라면 반드시 두 값 모두 지정해야 한다. 오른쪽 단항 연산자인 경우는 LEFTARG 값을, 왼쪽 단항 연산자는 RIGHTARG 값을 지정해야 한다.
함수이름에 지정하는 함수는 CREATE FUNCTION 명령으로 바른 인자(하나 또는 두 개의 인자)를 지정해서 만든 함수여야 한다.
다른 구문들은 모두 선택형이다. 각 옵션들에 대한 자세한 설명은 36.13절에서 자세히 설명한다.
한 연산자를 만드려면, 먼저 입력 인자의 자료형과, 출력 인자의 자료형에 대한 USAGE 권한이 있어야 하며, 지정한 함수에 대해서는 EXECUTE 권한이 있어야 한다. 교환연산자나 부정연산자를 지정했다면, 그 연산자의 소유주도 만드는 연산자의 소유주와 같아야 한다.
연산자 이름. 사용할 수 있는 문자는 위에서 설명하고 있다. 스키마를 지정하려면 CREATE OPERATOR myschema.+ (...) 형태로 지정한다. 스키마 이름이 빠지면 현재 스키마 소속으로 만들어진다. 한 스키마 내에 같은 이름의 연산자를 만들 수 있는데, 이 경우는 함수의 오버로딩과 같이 그 사용하는 자료형이 다르면 된다.
연산 처리 함수
연산자의 왼쪽 자료형. 왼쪽 단항 연산자인 경우는 생략 되어야 함.
연산자의 오른쪽 자료형. 오른쪽 단항 연산자인 경우는 생략 되어야 함.
교환 연산자
부정 연산자
이 연산자의 제한 선택 검증 함수
이 연산자의 조인 선택 검증 함수
이 연산자로 해쉬 조인이 가능 하도록 지정
이 연산자로 머지 조인이 가능 하도록 지정
교환연산자처럼 지정할 옵션 값으로 연산자가 사용될 경우, 그 연산자에 스키마를 지정해야 한다면, OPERATOR() 구문을 사용해야 한다. 사용예:
COMMUTATOR = OPERATOR(myschema.===) ,
사용자 정의 새로운 연산자에 대한 보다 자세한 내용은 36.12절에서 소개하고 있다.
CREATE OPERATOR 명령으로 연산자를 만들 때, 연산자의 어휘적 우선순위는 임의로 지정할 수 없다. 왜냐하면, 연산자 우선 순위는 고정되어 있다. 이 우선 순위에 대한 자세한 이야기는 4.1.6절에서 다룬다.
SORT1, SORT2, LTCMP, GTCMP 옵션들은 머지 조인이 가능한 연산자로 지정할 경우 자연스럽게 사용되는 기능이기 때문에, 더 이상 사용하지 않는다. B-트리 연산자 가족을 대신에 찾아서 해당 처리를 하기 때문에 더 이상 필요가 없다. 이런 옵션을 지정했는데, MERGES 옵션을 지정했다면, 그 옵션은 무시 된다.
데이터베이스에서 사용자 정의 연산자를 삭제 하려면, DROP OPERATOR 명령을 사용한다. 해당 연사자를 변경하려면, ALTER OPERATOR 명령을 사용한다.