지원 버전 :현재(17) /16 / 15 / 14 / 13
개발 버전 :18 / Devel
지원되지 않은 버전 :12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2 / 7.1

운영자 생성

운영자 생성 - 새 연산자 정의

시놉시스

운영자 생성이름(
    기능 | 프로 시저 =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. ===),

노트

참조섹션 36.14and섹션 36.15자세한 내용은

자기 응고 연산자를 정의 할 때 그냥 그렇게합니다. 한 쌍의 정류 연산자를 정의 할 때는 상황이 조금 까다로워집니다. 어떻게 정의 될 첫 번째는 어떻게 다른 하나를 언급 할 수 있습니까? 이 문제에 대한 세 가지 해결책이 있습니다.

  • 한 가지 방법은를 생략하는 것입니다.Commutator당신이 정의한 첫 번째 연산자의 조항을 정의한 다음 두 번째 연산자의 정의에서 제공합니다. 부터PostgreSQL정류 연산자가 쌍을 이루는 것을 알고 있습니다. 두 번째 정의를 볼 때 자동으로 돌아가서 누락 된 것을 채우게됩니다Commutator첫 번째 정의의 조항.

  • 더 간단한 방법은 단지 포함하는 것입니다Commutator두 정의의 조항. 언제PostgreSQL첫 번째 정의를 처리하고Commutator존재하지 않는 연산자를 말하면 시스템은 시스템 카탈로그에서 해당 연산자에게 더미 입력을 만듭니다. 이 더미 항목은 운영자 이름, 왼쪽 및 오른쪽 피연산자 유형 및 소유자에 대해서만 유효한 데이터를 갖습니다.PostgreSQL이 시점에서 추론 할 수 있습니다. 첫 번째 운영자의 카탈로그 항목은이 더미 항목에 연결됩니다. 나중에 두 번째 연산자를 정의하면 시스템이 두 번째 정의의 추가 정보로 더미 항목을 업데이트합니다. 더미 연산자가 채워지기 전에 사용하려고하면 오류 메시지 만 얻게됩니다.

  • 또는 두 연산자 모두 정의 할 수 있습니다CommutatorClauses and운영자 변경정류기 링크를 설정하는 데 사용할 수 있습니다. 충분합니다Alter두 사람 중 하나입니다.

세 가지 경우 모두 통근자로 표시하려면 두 연산자를 소유해야합니다.

부정적인 연산자 쌍은 정류기 쌍과 동일한 방법을 사용하여 정의 할 수 있습니다.

운영자의 어휘 우선 순위를 지정할 수 없습니다운영자 만들기20325_20389섹션 4.1.6우선 순위 세부 사항은

쓸모없는 옵션Sort1, Sort2, LTCMPgtcmp이전에는 합병 가능한 연산자와 관련된 정렬 연산자의 이름을 지정하는 데 사용되었습니다. 관련 운영자에 대한 정보는 대신 B- 트리 운영자 패밀리를 보면서 발견되기 때문에 더 이상 필요하지 않습니다. 이러한 옵션 중 하나가 제공되면 암시 적으로 설정을 제외하고는 무시됩니다병합true.

use드롭 연산자데이터베이스에서 사용자 정의 연산자를 삭제합니다. 사용Alter Operator데이터베이스에서 연산자를 수정하려면

다음 명령은 데이터 유형에 대한 새 연산자, 영역 평등을 정의합니다Box:

운영자 만들기 === (
    leftarg = 상자,
    rightarg = 상자,
    function = area_equal_function,
    통근자 = ===,
    부정기 =! ==,
    제한 = Area_Restriction_Function,
    join = area_join_function,
    해시, 합병
);

호환성

운영자 생성isPostgreSQL확장. SQL 표준에는 사용자 정의 연산자에 대한 조항이 없습니다.

정정 제출

문서에 올바르지 않은 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 귀하의 경험 또는 추가 설명이 필요합니다. 사용이 양식문서 문제를보고하려면