이 문서는 지원되지 않는 PostgreSQL 버전에 대한 것입니다.
당신은 다음과 같은 페이지를 보고 싶을 수도 있습니다.PostgreSQL : 문서 : 17 : 10 장 10 장 토토 사이트 순위버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.

6장. 토토 베이 전환

SQL질의는 의도적으로 또는 아니요, 동일한 표현식에 서로 다른 데이터 토토 베이을 혼합해야 합니다.포스트그레스광범위한 시설을 갖추고 있습니다 혼합형 표현식을 평가하기 위한 것입니다.

많은 경우에 사용자는 세부사항을 이해할 필요가 없습니다. 토토 베이 변환 메커니즘. 그러나 암시적 변환은 수행자포스트그레다음에 영향을 줄 수 있습니다. 쿼리의 명백한 결과이며 이러한 결과는 사용자 또는 프로그래머는명시적토토 베이 강제.

이 장에서는 다음을 소개합니다.포스트그레유형 변환 메커니즘 및 컨벤션. 사용자 가이드의 관련 섹션을 참조하고 특정 데이터 유형에 대한 자세한 내용은 프로그래머 가이드를 참조하세요. 허용되는 함수 및 연산자.

프로그래머 가이드에는 정확한 알고리즘에 대한 자세한 내용이 있습니다. 암시적 토토 베이 변환 및 강제 변환에 사용됩니다.

개요

SQL강력한 형식의 언어입니다. 즉, 모든 데이터 항목에는 연관된 데이터 토토 베이이 있습니다. 동작과 허용되는 사용법을 결정합니다.포스트그레확장 가능한 토토 베이 시스템이 있습니다. 다른 것보다 훨씬 더 일반적이고 유연합니다.RDBMS구현. 따라서 대부분의 토토 베이 변환은 행동포스트그레스해야 합니다 임시 휴리스틱이 아닌 일반 규칙에 따라 관리됩니다. 사용자가 정의한 경우에도 의미가 있는 혼합 토토 베이 표현식 토토 베이.

포스트그레스스캐너/파서 어휘 요소를 다섯 가지 기본 범주로 디코딩합니다. 정수, 부동 소수점, 문자열, 이름 및 키워드. 가장 확장된 토토 베이 먼저 문자열로 토큰화됩니다.SQL언어 정의를 통해 유형 지정 가능 문자열이 있는 이름이며 이 메커니즘은 다음에서 사용됩니다.포스트그레올바른 위치에서 파서를 시작하려면 경로. 예를 들어 쿼리

tgl= SELECT 텍스트 '원산지' AS "라벨", 포인트 '(0,0)' AS "값";
라벨 |값
-----+-----
원점|(0,0)
(1행)
다음 유형의 두 개의 문자열이 있습니다.텍스트그리고포인트. 토토 베이이 지정되지 않은 경우 자리표시자 토토 베이알 수 없음할당됨 처음에는 아래 설명된 대로 이후 단계에서 해결될 예정입니다.

네 가지 기본이 있습니다.SQL다음에서 고유 유형 변환 규칙이 필요한 구성포스트그레파서:

운영자

포스트그레스표현식 허용 왼쪽 및 오른쪽 단항(인수 1개) 연산자와 이진(인수 2개) 연산자.

함수 호출

대다수포스트그레유형 시스템은 풍부한 기능 세트를 중심으로 구축되었습니다. 함수 호출 특정 쿼리에 대해 하나 이상의 인수가 있어야 합니다. 시스템에서 사용할 수 있는 기능과 일치해야 합니다. 카탈로그.

쿼리 대상

SQLINSERT 문은 테이블에 대한 쿼리 결과입니다. 쿼리의 표현식 목표와 일치해야 하며 아마도 목표로 변환되어야 합니다. 삽입 열입니다.

UNION 쿼리

UNION SELECT 문의 모든 선택 결과는 다음과 같아야 합니다. 단일 열 집합에 나타나며 각 SELECT의 유형은 절은 일치되어야 하며 균일한 세트로 변환되어야 합니다.

많은 일반 유형 변환 규칙은 간단한 규칙을 사용합니다. 다음을 기반으로 구축됨포스트그레함수 및 운영자 시스템 테이블. 여기에는 몇 가지 휴리스틱이 포함되어 있습니다. 에 대한 더 나은 지원 규칙을 위한 변환 규칙SQL92다음과 같은 표준 네이티브 유형smallint, 정수플로트.

포스트그레파서는 다음을 사용합니다. 모든 유형 변환 함수는 단일 형식을 사용하는 규칙 소스 유형의 인수이며 이름이 동일한 이름으로 지정됩니다. 대상 유형. 이 기준을 충족하는 모든 기능은 다음과 같은 것으로 간주됩니다. 유효한 변환 함수이며 파서에서 그대로 사용될 수 있습니다. 이 간단한 가정은 파서에게 유형을 탐색할 수 있는 능력을 제공합니다. 하드코딩 없이 변환 가능, 확장 가능 사용자 정의 유형을 사용하면 이러한 동일한 기능을 투명하게 사용할 수 있습니다.

파서에 추가 경험적 방법이 제공되어 다음을 허용합니다. 올바른 행동에 대한 더 나은 추측SQL표준 토토 베이. 5가지 카테고리가 있습니다. 정의된 토토 베이: 부울, 문자열, 숫자, 기하학 및 사용자 정의. 사용자 정의를 제외한 각 카테고리는 모호성을 해결하는 데 사용되는 "선호 토토 베이"이 있습니다. 후보자. 각 "사용자 정의" 토토 베이은 고유한 "선호 토토 베이"입니다. 너무 모호한 표현(여러 후보 구문 분석을 사용하는 경우) 솔루션) 사용자 정의 토토 베이이 하나만 있으면 단일 토토 베이으로 해결될 수 있습니다. 최선의 선택입니다. 사용자 정의 토토 베이이 여러 개인 경우 모호한 상태로 남아 오류가 발생합니다.

다음 안에만 후보 해법이 있는 모호한 표현입니다. 한 가지 유형 범주는 해결될 가능성이 높지만 모호함 여러 범주에 걸친 후보가 포함된 표현식은 가능성이 높습니다. 오류를 발생시키고 사용자에게 설명을 요청합니다.

지침

모든 토토 베이 변환 규칙은 여러 원칙으로 설계되었습니다. 염두에 두세요:

  • 암시적 변환에는 놀라운 또는 놀라운 변환이 있어서는 안 됩니다. 예측할 수 없는 결과.

  • 파서가 선험적이지 않은 사용자 정의 토토 베이 지식은 토토 베이 계층 구조에서 "더 높아야" 합니다. 에서 혼합 토토 베이 표현식, 기본 토토 베이은 항상 변환되어야 합니다. 사용자 정의 토토 베이으로(물론 변환이 가능한 경우에만) 필요).

  • 사용자 정의 유형은 관련이 없습니다. 현재,포스트그레정보가 없습니다 이외의 유형 간의 관계에서 사용할 수 있습니다. 내장 유형 및 암시적 유형에 대한 하드코딩된 경험적 방법 카탈로그에서 사용 가능한 기능을 기반으로 한 관계입니다.

  • 파서에서 추가 오버헤드가 없어야 합니다. 쿼리에 암시적 토토 베이 변환이 필요하지 않은 경우 실행기입니다. 즉, 쿼리가 잘 구성되어 있고 토토 베이이 이미 일치하면 추가 비용 없이 쿼리가 진행되어야 합니다. 파서의 시간과 불필요한 암시적 도입 없이 쿼리로의 변환 함수입니다.

    또한 쿼리에 일반적으로 암시적 함수에 대한 변환, 그리고 사용자가 정의하는 경우 올바른 인수 유형을 가진 명시적 함수, 파서 이 새로운 기능을 사용해야 하며 더 이상 암시적인 작업을 수행하지 않습니다. 이전 함수를 사용하여 변환합니다.