운영자 생성 - 새 연산자 정의
운영자 생성이름
( 기능 | 프로 시저 =function_name
[, leftarg =left_type
] [, rightarg =right_type
] [, 통근자 =com_op
] [, Negator =NEG_OP
] [, 제한 =res_proc
] [, join =join_proc
] [, 해시] [, 합병] )
운영자 생성
새 연산자 정의이름
. 운영자를 정의하는 사용자는 소유자가됩니다. 스키마 이름이 주어지면 지정된 스키마에서 연산자가 생성됩니다. 그렇지 않으면 현재 스키마에서 생성됩니다.
운영자 이름은 최대의 시퀀스입니다.paminatalen
-1 (기본적으로 63) 다음 목록에서 문자 :
+-*/< = ~! @#%^& | `?
선택한 이름에 몇 가지 제한 사항이 있습니다 :
--
and/*
댓글의 시작으로 취해지기 때문에 연산자 이름의 어느 곳에도 나타날 수 없습니다.
멀티 카리터 연산자 이름은 끝날 수 없습니다+
또는-
, 이름에 다음 문자 중 하나 이상을 포함하지 않는 한 :
~! @#%^& | `?
예를 들어@-
허용 연산자 이름이지만*-
그렇지 않습니다. 이 제한은 허용PostgreSQL토큰 사이의 공간을 필요로하지 않고 SQL 호환 명령을 구문 분석합니다.
기호=
SQL 문법에 의해 예약되어 있으므로 연산자 이름으로 사용할 수 없습니다.
연산자! =
<
입력에 있어서이 두 이름은 항상 동일합니다.
이진 연산자의 경우, 둘 다왼쪽
andRightarg
정의해야합니다. 접두사 연산자 만Rightarg
정의해야합니다. 그만큼function_name
함수는 이전에 사용하여 정의되어 있어야합니다함수 만들기
표시된 유형의 올바른 인수 (하나 또는 두 개)의 수를 수락하도록 정의되어야합니다.
의 구문에서운영자 생성
, 키워드기능
and절차
동일하지만 참조 된 함수는 절차가 아닌 함수 여야합니다. 키워드 사용절차
여기 역사적이고 더 이상 사용되지 않습니다.
다른 조항은 선택적 운영자 최적화 속성을 지정합니다. 그들의 의미는에 자세히 설명되어 있습니다.섹션 36.15.
연산자를 만들 수 있으려면usage
인수 유형 및 반환 유형에 대한 특권 및execute
기본 기능에 대한 특권. 정류자 또는 부정관 연산자가 지정된 경우 해당 연산자를 소유해야합니다.
이름
정의 할 연산자의 이름. 허용 가능한 문자는 위를 참조하십시오. 이름은 스키마 자격을 얻을 수 있습니다 (예 :운영자 생성 myschema.+ (...)
. 그렇지 않은 경우, 운영자는 현재 스키마에서 생성됩니다. 동일한 스키마의 두 연산자가 다른 데이터 유형에서 작동하는 경우 동일한 이름을 가질 수 있습니다. 이것을라고합니다.과부하.
function_name
이 연산자를 구현하는 데 사용되는 함수.
left_type
운영자의 왼쪽 피연산자의 데이터 유형 (있는 경우). 이 옵션은 접두사 연산자에게는 생략됩니다.
right_type
운영자의 오른쪽 피연산자의 데이터 유형.
com_op
이 연산자의 통근자.
NEG_OP
이 연산자의 부정 자.
RES_PROC
이 연산자의 제한 선택성 추정기 기능.
join_proc
이 연산자의 결합 선택성 추정기 기능.
해시
이 연산자가 해시 조인을 지원할 수 있음을 나타냅니다.
병합
이 연산자가 합병 조인을 지원할 수 있음을 나타냅니다.
스키마 자격을 갖춘 연산자 이름을 제공하려면com_op
또는 다른 선택적 인수는 사용Operator ()
구문, 예 :
Commutator = Operator (MySchema. ===),
자기 응고 연산자를 정의 할 때 그냥 그렇게합니다. 한 쌍의 정류 연산자를 정의 할 때는 상황이 조금 까다로워집니다. 어떻게 정의 될 첫 번째는 어떻게 다른 하나를 언급 할 수 있습니까? 이 문제에 대한 세 가지 해결책이 있습니다.
한 가지 방법은를 생략하는 것입니다.Commutator
당신이 정의한 첫 번째 연산자의 조항을 정의한 다음 두 번째 연산자의 정의에서 제공합니다. 부터PostgreSQL정류 연산자가 쌍을 이루는 것을 알고 있습니다. 두 번째 정의를 볼 때 자동으로 돌아가서 누락 된 것을 채우게됩니다Commutator
첫 번째 정의의 조항.
더 간단한 방법은 단지 포함하는 것입니다Commutator
두 정의의 조항. 언제PostgreSQL첫 번째 정의를 처리하고Commutator
존재하지 않는 연산자를 말하면 시스템은 시스템 카탈로그에서 해당 연산자에게 더미 입력을 만듭니다. 이 더미 항목은 운영자 이름, 왼쪽 및 오른쪽 피연산자 유형 및 소유자에 대해서만 유효한 데이터를 갖습니다.PostgreSQL이 시점에서 추론 할 수 있습니다. 첫 번째 운영자의 카탈로그 항목은이 더미 항목에 연결됩니다. 나중에 두 번째 연산자를 정의하면 시스템이 두 번째 정의의 추가 정보로 더미 항목을 업데이트합니다. 더미 연산자가 채워지기 전에 사용하려고하면 오류 메시지 만 얻게됩니다.
또는 두 연산자 모두 정의 할 수 있습니다Commutator
Clauses and운영자 변경
정류기 링크를 설정하는 데 사용할 수 있습니다. 충분합니다Alter
두 사람 중 하나입니다.
세 가지 경우 모두 통근자로 표시하려면 두 연산자를 소유해야합니다.
부정적인 연산자 쌍은 정류기 쌍과 동일한 방법을 사용하여 정의 할 수 있습니다.
운영자의 어휘 우선 순위를 지정할 수 없습니다운영자 만들기
20325_20389섹션 4.1.6우선 순위 세부 사항은
쓸모없는 옵션Sort1
, Sort2
, LTCMP
및gtcmp
이전에는 합병 가능한 연산자와 관련된 정렬 연산자의 이름을 지정하는 데 사용되었습니다. 관련 운영자에 대한 정보는 대신 B- 트리 운영자 패밀리를 보면서 발견되기 때문에 더 이상 필요하지 않습니다. 이러한 옵션 중 하나가 제공되면 암시 적으로 설정을 제외하고는 무시됩니다병합
true.
use드롭 연산자
데이터베이스에서 사용자 정의 연산자를 삭제합니다. 사용Alter Operator
데이터베이스에서 연산자를 수정하려면
다음 명령은 데이터 유형에 대한 새 연산자, 영역 평등을 정의합니다Box
:
운영자 만들기 === ( leftarg = 상자, rightarg = 상자, function = area_equal_function, 통근자 = ===, 부정기 =! ==, 제한 = Area_Restriction_Function, join = area_join_function, 해시, 합병 );
운영자 생성
isPostgreSQL확장. SQL 표준에는 사용자 정의 연산자에 대한 조항이 없습니다.
문서에 올바르지 않은 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 귀하의 경험 또는 추가 설명이 필요합니다. 사용이 양식문서 문제를보고하려면