이 문서는 지원되지 않는 버전의 PostgreSQL 용입니다.
당신은에 대해 같은 페이지를 볼 수 있습니다현재버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

운영자

변환 절차

운영자 평가

  1. pg_operator 시스템에서 정확한 일치를 확인하십시오 목록.

    1. 이진 연산자의 하나의 인수가알 수없는, 그런 다음 같은 유형이라고 가정합니다 다른 주장.

    2. 인수를 뒤집고 정확한 일치를 찾으십시오 그 자체로 가리키는 운영자와 함께 정류. 발견되면 인수를 뒤집습니다 트리를 구문 분석 하고이 연산자를 사용하십시오.

  2. 최고의 경기를 찾으십시오.

    1. 같은 이름의 모든 연산자 목록을 작성하십시오.

    2. 하나의 연산자 만 목록에 있으면 입력 토토 베이을 강요 할 수 있고 토토 베이이 있으면 오류를 던질 수 있습니다. 강요 될 수 없습니다.

    3. 모든 연산자에게 가장 명백한 일치를 유지하십시오 유형. 명시적인 경기가 없으면 모든 것을 유지하고 움직입니다. 다음 단계로. 한 명의 후보 만 남아 있으면 사용하십시오 유형을 강요 할 수있는 경우.

    4. 입력 인수가 "알 수 없음"인 경우 분류하십시오 부울, 숫자, 문자열, 기하학적, 기하학적 입력 후보 또는 사용자 정의. 카테고리가 혼합되어있는 경우 하나의 사용자 정의 유형보다 오류가 발생합니다 더 이상의 단서 없이는 올바른 선택을 추론 할 수 없습니다. 만약에 하나의 카테고리 만 존재하고 "선호하는"을 할당하십시오 이전에 있었던 입력 열에 "입력하십시오 "알려지지 않은".

    5. 가장 정확한 유형 일치가있는 후보자를 선택하십시오. 각 열의 "선호 유형"과 일치합니다 이전 단계에서 카테고리. 더 많은 것이 있다면 한 후보자보다 또는 없으면 오류.

지수 연산자

지수 연산자는 하나뿐입니다 카탈로그, 그리고 필요float8인수. 스캐너는 초기 토토 베이의를 할당합니다.int4이 쿼리 표현식의 두 인수 모두 :

tgl = "exp"로 2 ^ 3을 선택합니다.
exp
---
  8
(1 행)
따라서 파서는 피연산자와 쿼리는에 해당합니다.
tgl = float8 (2) ^ float8 (3)을 "exp"로 선택합니다.
exp
---
  8
(1 행)
또는
TGL = SELECT 2.0 ^ 3.0으로 "exp";
exp
---
  8
(1 행)

참고 :이 마지막 양식은 가장 적은 오버 헤드를 가지고 있습니다 함수는 암시 적 토토 베이 변환을 수행하도록 호출됩니다. 이것은 아닙니다 작은 쿼리에 대한 문제이지만 큰 테이블과 관련된 쿼리의 성능.

문자열 연쇄

문자열과 같은 구문은 문자열 유형으로 작업하는 데 사용됩니다. 복잡한 확장 유형으로 작업 할뿐만 아니라 끈 지정되지 않은 유형은 가능한 운영자 후보와 일치합니다.

하나의 지정되지 않은 인수 :

TGL = 텍스트 'ABC'||를 선택하십시오 '텍스트와 알 수없는'으로 'def';
텍스트와 알 수없는
---------------
ABCDEF
(1 행)

이 경우 파서는 운영자가 있는지 확인합니다. 취득텍스트두 인수 모두. 부터 두 번째 주장을 해석해야한다고 가정합니다. 타입텍스트.

지정되지 않은 토토 베이에 대한 연결 :

TGL = 'ABC'||를 선택하십시오 "지정되지 않은"로서의 'def';
지정되지 않은
----------
ABCDEF
(1 행)

이 경우 사용 할 유형의 초기 힌트가 없습니다. 쿼리에 유형이 지정되지 않기 때문입니다. 따라서 파서는 찾습니다 모든 후보 운영자와 모든 논쟁이 응시자는 문자열 유형입니다. "선호하는 유형"을 선택합니다 문자열,텍스트,이 쿼리의 경우

참고 :사용자가 새 유형을 정의하고 운영자“||” 그것으로 작업하기 위해이 쿼리는 더 이상 서면으로 성공하십시오. 파서에는 이제 후보 유형이 있습니다 두 가지 카테고리에서 사용할지 결정할 수 없었습니다.

Factorial

이 예는 흥미로운 결과를 보여줍니다. 전통적으로 요인 연산자는 정수에 대해서만 정의됩니다. 그만큼Postgres운영자 카탈로그에는 전용이 있습니다 정수 피연산자를 복용하는 Factorial의 한 항목. 주어진 경우 비 인구 숫자 인수,Postgres그 주장을 변환하려고 시도 할 것입니다 Factorial의 평가를위한 정수.

tgl = select (4.3!);
?열?
--------
      24
(1 행)

참고 :물론 이것은 수학적으로 의심되는 것으로 이어집니다 결과적으로 원칙적으로 비 인구의 계승은 한정된. 그러나 데이터베이스의 역할은 가르치는 것이 아닙니다. 수학이지만 데이터 조작을위한 도구입니다. 사용자 인 경우 부동 소수점 번호의 계승을 선택합니다.Postgres의무를 시도 할 것입니다.