연산자가 참조하는 특정 연산자 발현은 다음 절차를 사용하여 결정됩니다. 참고하세요 이 절차는 다음의 우선순위에 의해 간접적으로 영향을 받습니다. 관련된 연산자가 무엇인지 결정하기 때문에 하위 표현식은 어떤 연산자의 입력으로 간주됩니다. 참조섹션 4.1.6더 많은 정보를 원하시면.
운영자 유형 확인
다음에서 고려할 연산자를 선택하세요.pg_operator시스템 카탈로그.
스키마에 한정되지 않은 연산자 이름이 사용된 경우(일반적인
경우) 고려되는 연산자는 일치하는 연산자입니다.
현재에 표시되는 이름 및 인수 수
검색 경로(참조섹션 5.7.3). 만약에
자격을 갖춘 운영자 이름이 제공되었습니다.
지정된 스키마가 고려됩니다.
검색 경로가 다음과 같은 여러 연산자를 찾는 경우 동일한 인수 유형, 하나만 나타남 경로의 가장 빠른 것으로 간주됩니다. 연산자 서로 다른 인수 유형은 동일하게 간주됩니다. 검색 경로 위치에 관계없이 바닥글.
토토 꽁 머니가 입력을 정확하게 받아들이는지 확인하세요 인수 유형. 존재하는 경우(정확한 항목은 하나만 있을 수 있음) 고려된 토토 꽁 머니 집합과 일치하는 경우) 이를 사용하세요.
가장 일치하는 항목을 찾으세요.
입력된 후보 토토 꽁 머니를 폐기합니다. 유형이 일치하지 않아 변환할 수 없습니다( 암시적 변환)을 일치시킵니다.알 수 없음리터럴은 다음과 같이 가정됩니다. 이 목적을 위해 무엇이든 변환 가능합니다. 하나만 있으면 후보가 남아 있으면 사용하십시오. 그렇지 않으면 다음으로 계속 단계.
입력 인수가 도메인 유형인 경우 이를 처리합니다. 이후의 모든 도메인에 대해 도메인의 기본 유형으로 간주됩니다. 단계. 이렇게 하면 도메인이 기본처럼 작동합니다. 모호한 토토 꽁 머니를 위한 유형 해결.
모든 후보를 살펴보고 다음과 같은 후보를 유지하세요. 입력 유형과 가장 정확하게 일치합니다. 모든 후보자 유지 정확히 일치하는 항목이 없는 경우. 후보가 1명뿐인 경우 남아 있으면 사용하세요. 그렇지 않으면 다음 단계로 진행하세요.
모든 후보를 살펴보고 해당 후보를 유지하세요. (입력 데이터 유형의 유형 중) 선호하는 유형을 허용합니다. 카테고리) 유형 변환이 가장 많은 위치에 있음 요구될 것입니다. 수락하는 후보자가 없으면 모든 후보자를 유지합니다. 선호하는 유형. 후보가 하나만 남아 있으면 해당 후보를 사용하십시오. 그렇지 않으면 다음 단계로 진행하세요.
입력 인수가 다음과 같은 경우알 수 없음, 허용되는 유형 카테고리를 확인하세요. 나머지 인수에 의한 해당 인수 위치에서 후보자. 각 위치에서 다음을 선택합니다.문자열후보자가 수락하는 경우 카테고리 그 카테고리. (문자열에 대한 이러한 편견은 적절합니다. 알 수 없는 유형의 리터럴은 문자열처럼 보이기 때문입니다.) 그렇지 않으면 나머지 후보자가 모두 동의하면 동일한 유형 카테고리, 해당 카테고리를 선택하십시오. 그렇지 않으면 올바른 선택을 추론할 수 없기 때문에 실패합니다. 더 이상 단서 없이. 이제 그렇지 않은 후보자를 폐기하십시오. 선택한 유형 카테고리를 수락합니다. 게다가 만약 있다면 후보자는 해당 카테고리에서 선호하는 유형을 수락합니다. 선호하지 않는 유형을 허용하는 후보를 삭제합니다. 그 주장.
후보가 한 명만 남으면 그것을 사용하십시오. 그렇지 않은 경우 후보가 있거나 둘 이상의 후보가 남아 있는 경우 실패하다.
몇 가지 예가 이어집니다.
예제 10-1. 계승 토토 꽁 머니 유형 해결
계승 토토 꽁 머니는 하나만 있습니다(접미사!)은 표준 카탈로그에 정의되어 있으며, 유형의 인수비긴트. 스캐너 초기 유형을 할당합니다.정수에 이 쿼리 표현식의 인수:
선택 40 ! AS "40 계승";
40 계승
-------------------------------------
815915283247897734345611269596115894272000000000
(1행)
그래서 파서는 피연산자에 대한 유형 변환을 수행하고 쿼리는 다음과 같습니다:
캐스트 선택(40 AS bigint) ! AS "40 계승";
예제 10-2. 문자열 연결 연산자 유형 해결
문자열 유형 작업에 문자열과 유사한 구문이 사용됩니다. 복잡한 확장 유형으로 작업하는 경우. 문자열 지정되지 않은 유형은 가능한 연산자와 일치합니다. 후보자.
하나의 지정되지 않은 인수가 있는 예:
텍스트 'abc' 선택 || 'def' AS "텍스트 및 알 수 없음"; 텍스트가 있고 알 수 없음 ------------------ abcdef (1행)
이 경우 파서는 토토 꽁 머니가 있는지 확인합니다. 복용텍스트두 인수 모두에 대해. 이후 두 번째 인수는 다음과 같아야 한다고 가정합니다. 유형으로 해석됨텍스트.
다음은 지정되지 않은 두 값의 연결입니다. 유형:
'abc' 선택 || 'def' AS "지정되지 않음"; 불특정 ------------- abcdef (1행)
이 경우 사용할 유형에 대한 초기 힌트가 없습니다. 쿼리에 유형이 지정되지 않았기 때문입니다. 그래서 파서는 다음과 같이 보입니다. 모든 후보 연산자에 대해 후보가 있음을 찾습니다. 문자열 범주 및 비트 문자열 범주 입력을 모두 허용합니다. 가능한 경우 문자열 카테고리가 선호되므로 카테고리를 선택한 다음 선호하는 문자열 유형을 선택합니다.텍스트은 특정 유형으로 사용됩니다. 알 수 없는 유형 리터럴을 다음과 같이 해결합니다.
예제 10-3. 절대값과 부정 운영자 유형 확인
그PostgreSQL토토 꽁 머니 카탈로그에는 접두사 토토 꽁 머니에 대한 여러 항목이 있습니다.@, 모두 절대값을 구현합니다. 다양한 숫자 데이터 유형에 대한 연산. 이 항목 중 하나 유형에 해당합니다.float8는 숫자 카테고리에서 선호되는 유형입니다. 그러므로PostgreSQL직면했을 때 해당 항목을 사용합니다 와 함께알 수 없음입력:
SELECT @ '-4.5' AS "abs"; 복근 ----- 4.5 (1행)
여기서 시스템은 알 수 없는 유형을 암시적으로 해결했습니다. 유형으로서의 리터럴float8신청하기 전에 선택한 토토 꽁 머니입니다. 우리는 그것을 확인할 수 있습니다float8그리고 다른 유형은 사용되지 않았습니다:
SELECT @ '-4.5e500' AS "abs"; 오류: "-4.5e500"이 배정밀도 유형의 범위를 벗어났습니다.
반면에 접두사 토토 꽁 머니~(비트 부정)은 정수에 대해서만 정의됩니다. 데이터 유형이 아닙니다.float8. 그래서 우리가 노력한다면 비슷한 경우~, 우리는 다음을 얻습니다:
SELECT ~ '20' AS "부정"; 오류: 연산자가 고유하지 않습니다. ~ "알 수 없음" 힌트: 가장 적합한 후보 연산자를 선택할 수 없습니다. 추가해야 할 수도 있습니다. 명시적인 유형 캐스팅.
이는 시스템이 다음 중 어느 것을 결정할 수 없기 때문에 발생합니다. 여러 개 가능~연산자는 다음과 같아야 합니다. 선호됩니다. 명시적인 캐스트를 통해 도움을 드릴 수 있습니다.
SELECT ~ CAST('20' AS int8) AS "부정";
부정
----------
-21
(1행)
예제 10-4. 도메인의 사용자 정의 토토 꽁 머니 유형
사용자는 때때로 단지 도메인 유형. 이것은 가능하지만 그다지 유용하지는 않습니다. 운영자 해결 규칙이 설계되었기 때문에 보일 수도 있습니다. 도메인의 기본 유형에 적용되는 토토 꽁 머니를 선택합니다. 로서 예시 고려
CREATE DOMAIN mytext AS 텍스트 CHECK(...); CREATE FUNCTION mytext_eq_text (mytext, text) RETURNS 부울 AS ...; CREATE OPERATOR = (절차=mytext_eq_text, leftarg=mytext, rightarg=text); CREATE TABLE mytable(val mytext); SELECT * FROM mytable WHERE val = 'foo';
이 쿼리는 사용자 정의 토토 꽁 머니를 사용하지 않습니다. 파서는 먼저 a가 있는지 확인하세요.mytext = mytext토토 꽁 머니 (단계 2.a), 존재하지 않습니다. 그런 다음에는 다음을 고려할 것입니다. 도메인의 기본 유형텍스트, 그리고 거기에 있는지 확인하세요 는텍스트 = 텍스트토토 꽁 머니 (2단계.b), 이는 있다; 그래서 그것은 해결됩니다.알 수 없음-유형 리터럴 다음과 같이텍스트그리고 다음을 사용합니다텍스트 = 텍스트토토 꽁 머니. 관례를 얻는 유일한 방법 사용할 토토 꽁 머니는 리터럴을 명시적으로 캐스팅하는 것입니다.
SELECT * FROM mytable WHERE val = 텍스트 'foo';
그래서마이텍스트 = 텍스트연산자를 찾았습니다 정확히 일치 규칙에 따라 즉시. 만약 베스트 매치 규칙에 도달하면 적극적으로 차별합니다. 도메인 유형의 연산자에 대해. 그렇지 않은 경우, 그러한 연산자는 너무 많은 모호한 연산자 오류를 생성합니다. 캐스팅 규칙은 항상 도메인을 캐스팅 가능한 것으로 간주하기 때문입니다. 기본 유형을 오가며 도메인 운영자는 다음과 같습니다. 유사한 이름의 것과 동일한 경우에 모두 사용 가능한 것으로 간주됩니다. 기본 유형에 대한 연산자입니다.