ALTER OPERATOR

ALTER OPERATOR

ALTER OPERATOR는 연산자(operator)의 정의를 바꾸는 명령이에요. 연산자의 소유자, 스키마, 그리고 선택도 추정 함수나 교환자·부정자 같은 선택적 속성을 변경할 수 있어요.

출처: PostgreSQL 문서

본문

문법 (Synopsis)

ALTER OPERATOR name ( { left_type | NONE } , right_type )
    OWNER TO { new_owner | CURRENT_ROLE | CURRENT_USER | SESSION_USER }

ALTER OPERATOR name ( { left_type | NONE } , right_type )
    SET SCHEMA new_schema

ALTER OPERATOR name ( { left_type | NONE } , right_type )
    SET ( {  RESTRICT = { res_proc | NONE }
           | JOIN = { join_proc | NONE }
           | COMMUTATOR = com_op
           | NEGATOR = neg_op
           | HASHES
           | MERGES
          } [, ... ] )

설명 (Description)

ALTER OPERATOR는 연산자의 정의를 변경해요.

이 명령을 쓰려면 연산자의 소유자여야 해요. 소유자를 바꾸려면 새 소유 역할로 SET ROLE 할 수 있어야 하고, 그 역할이 연산자의 스키마에 대한 CREATE 권한도 가져야 해요. (이런 제약은 소유자 변경을 통해 연산자를 드롭하고 재생성하는 것 이상의 일을 못 하게 하려는 거예요. 다만 슈퍼유저는 어떤 연산자의 소유권이든 바꿀 수 있어요.)

파라미터 (Parameters)

name — 기존 연산자의 이름이에요 (스키마 한정을 써도 돼요).

left_type — 연산자의 왼쪽 피연산자 데이터 타입이에요. 연산자에 왼쪽 피연산자가 없다면 NONE을 적어요.

right_type — 연산자의 오른쪽 피연산자 데이터 타입이에요.

new_owner — 연산자의 새 소유자예요.

new_schema — 연산자의 새 스키마예요.

res_proc — 이 연산자의 제한 선택도 추정 함수(restriction selectivity estimator function)예요. 기존 추정 함수를 제거하려면 NONE을 적어요.

join_proc — 이 연산자의 조인 선택도 추정 함수예요. 기존 추정 함수를 제거하려면 NONE을 적어요.

com_op — 이 연산자의 교환자(commutator)예요. 기존 교환자가 없는 경우에만 바꿀 수 있어요.

neg_op — 이 연산자의 부정자(negator)예요. 기존 부정자가 없는 경우에만 바꿀 수 있어요.

HASHES — 이 연산자가 해시 조인(hash join)을 지원할 수 있음을 나타내요. 켜는 것만 가능하고 끌 수는 없어요.

MERGES — 이 연산자가 병합 조인(merge join)을 지원할 수 있음을 나타내요. 켜는 것만 가능하고 끌 수는 없어요.

주의 (Notes)

Section 36.14와 Section 36.15를 참고하세요.

교환자는 서로가 교환자가 되는 쌍을 이루기 때문에, ALTER OPERATOR SET COMMUTATORcom_op의 교환자도 대상 연산자로 설정해요. 마찬가지로 ALTER OPERATOR SET NEGATORneg_op의 부정자를 대상 연산자로 설정해요. 따라서 대상 연산자뿐 아니라 교환자나 부정자 연산자의 소유자여야 해요.

예제 (Examples)

text 타입의 사용자 연산자 a @@ b의 소유자를 바꾸려면:

ALTER OPERATOR @@ (text, text) OWNER TO joe;

int[] 타입의 사용자 연산자 a && b의 제한·조인 선택도 추정 함수를 바꾸려면:

ALTER OPERATOR && (int[], int[]) SET (RESTRICT = _int_contsel, JOIN = _int_contjoinsel);

&& 연산자를 자기 자신의 교환자로 표시하려면:

ALTER OPERATOR && (int[], int[]) SET (COMMUTATOR = &&);

호환성 (Compatibility)

SQL 표준에는 ALTER OPERATOR 문이 없어요.

더 알아보기 (Learn more)

  • 연산자는 왼쪽 피연산자 타입(left_type)과 오른쪽 피연산자 타입(right_type)으로 식별돼요.
  • HASHESMERGES는 한번 켜면 끌 수 없어요.
  • 교환자·부정자를 설정하면 상대편 연산자도 함께 설정되므로, 두 연산자의 소유자여야 해요.