SQL는 강력하게 입력되었습니다 언어. 즉, 모든 데이터 항목에는 관련 데이터 유형이 있습니다. 동작을 결정하고 허용 사용.PostgreSQL확장 가능한 유형 시스템이 있습니다 그것은 다른 것보다 훨씬 더 일반적이고 유연합니다RDBMS구현. 따라서 대부분의 유형 의 변환 행동PostgreSQL장군이 통제해야합니다 보다는 규칙adhocHeuristics, 혼합 유형 표현이 의미가 있도록 허용합니다 사용자 정의 유형으로.
the토토 결과스캐너/파서 어휘 요소를 다섯 가지 기본 범주로 해독합니다. 정수, 부동 소수점 번호, 문자열, 이름 및 키워드. 대부분의 확장 유형은 먼저 문자열로 토큰 화됩니다. 그만큼SQL언어 정의가 허용됩니다 문자열로 유형 이름을 지정하면이 메커니즘은 사용PostgreSQL시작합니다 올바른 경로를 구문 분석하십시오. 예를 들어, 쿼리
TGL = "airt '를"label ", point (0,0)로"value "로 선택합니다. 라벨 | 값 --------+------- 원산지 | (0,0) (1 행)
유형의 2 개의 문자 상수가 있습니다텍스트and포인트. 유형이 a에 지정되지 않은 경우 문자열 문자, 그런 다음 자리 표시 자 유형알 수없는처음에는 할당되어 해결됩니다 아래에 설명 된 후기 단계.
4 가지 기본 사항이 있습니다SQL별도의 유형이 필요한 구성 의 전환 규칙토토 결과파서 :
토토 결과허용 접두사 및 포스트 픽스 단일 표현식 (한 번) 연산자 및 바이너리 (2 학습) 연산자.
많은PostgreSQL유형 시스템은 풍부한 기능 세트 주위에 구축되었습니다. 함수 호출에는 하나 이상의 인수가 있습니다. 특정 쿼리는 사용 가능한 기능과 일치해야합니다 시스템 카탈로그에서. 부터PostgreSQL기능을 허용합니다 과부하, 함수 이름만으로는 독특하지 않습니다 호출 할 기능을 식별하십시오. 파서는 선택해야합니다 제공된 데이터 유형을 기반으로 한 올바른 기능 논쟁.
SQL 삽입and업데이트진술은 표현식 결과를 표에 배치합니다. 쿼리의 표현식은 아마도 대상 열의 유형으로 변환 될 것입니다.
모든 선택이 Unionized의 결과 이후select명령문은 단일 세트에 나타나야합니다 열의, 각각의 결과 유형select조항은 일치해야합니다 균일 한 세트로 변환되었습니다. 마찬가지로 결과 A의 표현CASE구성 가되도록 공통 유형으로 강요되어야합니다.case표현 전체가 알려져 있습니다 출력 유형.
많은 일반 유형 변환 규칙은 간단합니다 에 구축 된 컨벤션토토 결과기능 및 운영자 테이블. 전환에는 일부 휴리스틱이 포함되어 있습니다 에 대한 컨벤션을 더 잘 지원하는 규칙SQL표준 기본 유형smallint, Integer및Real.
thePostgreSQL파서 사용 모든 유형 변환 기능이 단일을 취하는 협약 소스 유형의 인수는 대상 유형. 이러한 기준을 충족하는 모든 기능은 다음과 같습니다 유효한 변환 기능으로 간주되며 그와 같은 파서. 이 간단한 가정은 파서에게 제공합니다 유형 변환 가능성을 탐색 할 수있는 힘 확장 된 사용자 정의 유형을 사용할 수 있도록 하드 코딩 같은 특징은 투명하게.
파서에 추가 휴리스틱이 제공됩니다. 적절한 행동에 대한 더 나은 추측SQL표준 유형. 몇 가지 기본이 있습니다유형 카테고리정의 :부울, 숫자, String, Bitstring, DateTime, 타임 스팬, 기하학적, 네트워크및 사용자 정의. 사용자 정의를 제외하고 각 범주는선호 유형모호성이있을 때 우선적으로 선택됩니다. 에서 사용자 정의 범주, 각 유형은 자체 선호 유형입니다. 모호한 표현 (여러 후보자 구문 분석 솔루션)은 여러 가지가있을 때 종종 해결할 수 있습니다. 내장 유형이지만있을 때 오류가 발생합니다. 사용자 정의 유형에 대한 여러 선택.
모든 유형 변환 규칙은 여러 원칙으로 설계되었습니다 명심 :
암시 적 변환은 결코 놀라운 일을해서는 안됩니다 예측할 수없는 결과.
사용자 정의 유형, 그 중 파서에 없음우선 순위지식이 있어야합니다"Higher"유형 계층에서. ~ 안에 혼합형 표현식, 기본 유형은 항상 있어야합니다 사용자 정의 유형으로 변환됩니다 (물론 전환이 필요합니다).
사용자 정의 유형은 관련이 없습니다. 현재,PostgreSQL유형 간의 관계에 대한 정보, 내장 유형에 대한 하드 코드 휴리스틱 이외 이용 가능한 기능을 기반으로하는 암시 적 관계 목록.
파서에서 여분의 오버 헤드가 없어야합니다. 쿼리에 암시 적 유형 변환이 필요하지 않은 경우 집행자. 즉, 쿼리가 잘 공식화되고 이미 유형이 일치하면 쿼리는 지출없이 진행해야합니다 파서에서 추가 시간과 불필요한 소개없이 쿼리로의 암시 적 변환 기능.
또한 쿼리에 일반적으로 암시 적이 필요한 경우 함수에 대한 변환, 그렇다면 사용자는 올바른 인수 유형 인 파서의 명시 적 기능 이 새로운 기능을 사용해야하며 더 이상 이전 기능을 사용한 암시 적 변환.