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 COMMUTATOR는 com_op의 교환자도 대상 연산자로 설정해요. 마찬가지로 ALTER OPERATOR SET NEGATOR도 neg_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)으로 식별돼요. HASHES와MERGES는 한번 켜면 끌 수 없어요.- 교환자·부정자를 설정하면 상대편 연산자도 함께 설정되므로, 두 연산자의 소유자여야 해요.