SQL강력한 유형입니다. 언어. 즉, 모든 데이터 항목에는 연관된 데이터 유형이 있습니다. 동작과 허용되는 사용법을 결정합니다.포스트그레SQL확장 가능한 유형 시스템이 있습니다 이는 다른 것보다 훨씬 더 일반적이고 유연합니다.RDBMS구현. 따라서 대부분의 유형은 전환 동작포스트그레SQL장군의 통치를 받아야 함 by가 아닌 규칙임시휴리스틱, 혼합 유형 표현이 의미 있는 경우에도 허용 사용자 정의 유형을 사용합니다.
그PostgreSQL스캐너/파서 어휘 요소를 다섯 가지 기본 범주로 디코딩합니다. 정수, 부동 소수점 숫자, 문자열, 이름 및 키워드. 대부분의 확장 유형은 먼저 문자열로 토큰화됩니다.SQL언어 정의는 다음을 허용합니다 문자열로 유형 이름을 지정하며 이 메커니즘은 다음과 같습니다. 에서 사용됨포스트그레SQL시작하려면 올바른 경로를 파싱합니다. 예를 들어 쿼리
tgl= SELECT text 'Origin' AS "Label", 포인트 '(0,0)' AS "Value"; 라벨 | 가치 ------+------- 원산지 | (0,0) (1행)
유형의 리터럴 상수가 두 개 있습니다.텍스트그리고포인트. 유형이 지정되지 않은 경우 문자열 리터럴, 자리 표시자 유형알 수 없음처음에 할당되어 해결될 예정입니다. 아래에 설명된 대로 이후 단계를 진행합니다.
네 가지 기본 사항이 있습니다.SQL고유한 유형이 필요한 구성 의 변환 규칙포스트그레SQL파서:
포스트그레SQL허용합니다 접두사와 접미사가 있는 표현식 단항(인수 1개) 연산자 및 이진(인수 2개) 연산자.
대다수포스트그레SQL유형 시스템은 풍부한 기능 세트를 중심으로 구축되었습니다. 함수 호출에는 하나 이상의 인수가 있습니다. 특정 쿼리는 사용 가능한 기능과 일치해야 합니다. 시스템 카탈로그에 있습니다. 이후PostgreSQL기능을 허용합니다 오버로딩, 함수 이름만으로는 고유하지 않습니다. 호출할 함수를 식별합니다. 파서는 선택해야 합니다 제공된 데이터 유형에 따른 올바른 함수 인수.
SQL 삽입그리고업데이트문은 표현식의 결과를 테이블에 배치합니다. 쿼리의 표현식은 다음과 일치해야 합니다. 아마도 대상 열의 유형으로 변환될 수 있습니다.
모든 선택은 노조에서 나온 결과이기 때문에선택문은 단일 세트로 나타나야 합니다 열의 각 결과 유형선택절은 일치해야 하며 유니폼 세트로 변경되었습니다. 마찬가지로 결과는 a의 표현사례구조물 공통 유형으로 강제 변환되어야 합니다.사례표현식 전체에는 다음이 알려져 있습니다. 출력 유형.
많은 일반 유형 변환 규칙은 단순함을 사용합니다. 를 기반으로 한 규칙PostgreSQL함수 및 연산자 시스템 테이블. 변환에는 몇 가지 경험적 방법이 포함되어 있습니다. 에 대한 규칙을 더 잘 지원하기 위한 규칙SQL다음과 같은 표준 네이티브 유형smallint, 정수및진짜.
그PostgreSQL파서가 사용하는 것 모든 유형 변환 함수가 단일 유형을 취한다는 규칙 소스 유형의 인수이며 다음과 같은 이름으로 명명됩니다. 대상 유형. 이러한 기준을 충족하는 모든 기능은 유효한 변환 함수로 간주되며 다음에 의해 사용될 수 있습니다. 파서 그 자체. 이 간단한 가정은 파서에게 다음을 제공합니다. 없이 유형 변환 가능성을 탐색할 수 있는 힘 하드코딩하여 확장된 사용자 정의 유형에서 이러한 항목을 사용할 수 있도록 허용 동일한 기능을 투명하게 제공합니다.
파서에 추가 경험적 방법이 제공되어 다음을 허용합니다. 올바른 행동에 대한 더 나은 추측SQL표준 유형. 몇 가지 기본이 있습니다.유형 카테고리정의됨:부울, 숫자, 문자열, 비트문자열, 날짜시간, 기간, 기하학적, 네트워크그리고 사용자 정의. 사용자 정의를 제외한 각 카테고리는 가 있습니다선호되는 유형이것은 모호한 경우 우선적으로 선택됩니다. 에서 사용자 정의 범주, 각 유형은 자체적으로 선호되는 유형입니다. 모호한 표현(다중 후보 구문 분석이 있는 표현) 솔루션)은 여러 가지 가능한 경우 해결될 수 있는 경우가 많습니다. 내장 유형이지만 다음과 같은 경우 오류가 발생합니다. 사용자 정의 유형에 대한 다중 선택.
모든 유형 변환 규칙은 여러 원칙으로 설계되었습니다. 염두에 두세요:
암시적 변환에는 놀라운 또는 예측할 수 없는 결과.
파서에 없는 사용자 정의 유형선험적으로지식이 있어야 합니다"더 높은"유형 계층 구조에서. 에서 혼합 유형 표현식, 기본 유형은 항상 사용자 정의 유형으로 변환됩니다(물론, 변환이 필요합니다).
사용자 정의 유형은 관련이 없습니다. 현재,PostgreSQL없음 유형 간의 관계에 대해 사용할 수 있는 정보, 내장 유형에 대한 하드코딩된 경험적 방법 외에 사용 가능한 함수를 기반으로 한 암시적 관계 카탈로그.
파서에서 추가 오버헤드가 없어야 합니다. 쿼리에 암시적 유형 변환이 필요하지 않은 경우 실행기입니다. 즉, 쿼리가 잘 구성되어 있고 유형이 이미 일치하면 지출 없이 쿼리가 진행되어야 합니다. 파서에 불필요한 시간을 추가하지 않고 추가 시간을 가집니다. 쿼리로의 암시적 변환 함수입니다.
또한 쿼리에 일반적으로 암시적 함수에 대한 변환, 그리고 사용자가 정의하는 경우 올바른 인수 유형을 가진 명시적 함수, 파서 이 새로운 기능을 사용해야 하며 더 이상 다음 작업을 수행하지 않습니다. 이전 함수를 사용한 암시적 변환입니다.