윈 토토 : 문서 : 9.4 : | |||
---|---|---|---|
PostgreSQL : 문서 : 9.4 : 윈 토토 변환 | PostgreSQL : 문서 : 9.4 : 윈 토토 변환 | 10 장. 변환 유형 | PostgreSQL : 문서 : 9.4 : 토토 결과 |
SQL는 강력하게 입력 한 언어입니다. 즉, 모든 데이터 항목에는 동작을 결정하고 사용 허용되는 관련 데이터 유형이 있습니다.PostgreSQL다른 것보다 더 일반적이고 유연한 확장 가능한 유형 시스템이 있습니다SQL구현. 따라서 대부분의 유형 변환 동작PostgreSQL|adhoc휴리스틱. 이를 통해 사용자 정의 유형에서도 혼합형 표현식을 사용할 수 있습니다.
thePostgreSQL스캐너/파서는 어휘 요소를 정수, 비 인구 번호, 문자열, 식별자 및 키워드의 5 가지 기본 범주로 나눕니다. 대부분의 비 숫자 유형의 상수는 먼저 문자열로 분류됩니다.SQL언어 정의는 문자열로 유형 이름을 지정할 수 있으며이 메커니즘을 사용할 수 있습니다PostgreSQL구문자를 올바른 경로로 시작하려면. 예를 들어, 쿼리 :
텍스트 '원점'을 "레이블", 포인트 '(0,0)' 'value "로 선택합니다.
유형의 두 문자 상수가 있습니다텍스트and포인트. 문자열 리터럴에 유형이 지정되지 않은 경우 자리 표시 자형알 수없는처음에 할당되어 있으며, 아래에 설명 된대로 이후 단계에서 해결할 수 있습니다.
4 가지 기본 사항이 있습니다SQLremourt.PostgreSQL파서 :
많은PostgreSQL타입 시스템은 풍부한 기능 세트 주위에 구축되었습니다. 기능은 하나 이상의 인수를 가질 수 있습니다.PostgreSQL함수 과부하를 허용하면 기능 이름만으로 호출 될 함수를 고유하게 식별하지 않습니다. 파서는 제공된 인수의 데이터 유형에 따라 올바른 함수를 선택해야합니다.
PostgreSQL이진 (2 연기) 연산자뿐만 아니라 접두사 및 포스트 픽스 단술 (1- 연기) 연산자가있는 표현식을 허용합니다. 함수와 마찬가지로 연산자를 과부하 할 수 있으므로 올바른 연산자를 선택하는 것과 동일한 문제가 있습니다.
SQL 삽입and업데이트진술은 표현식 결과를 표에 배치합니다. 진술의 표현은 대상 열의 유형과 일치하고 아마도 변환되어야합니다.
모든 쿼리가 Unionized의 결과로 결과select명령문은 단일 열 세트에 표시되어 있어야합니다. 각 열의 결과 유형select절은 일치하고 균일 한 세트로 변환되어야합니다. 마찬가지로 a의 결과 표현CASE구성을 공통 유형으로 변환하여CASE표현식 전체에 알려진 출력 유형이 있습니다. 도 마찬가지입니다.배열구성 및 용가장 큰
and최소
기능.
시스템 카탈로그는 어떤 변환 또는에 대한 정보를 저장합니다.캐스트, 어떤 데이터 유형과 해당 변환을 수행하는 방법 사이에 존재합니다. 사용자가 추가 캐스트를 추가 할 수 있습니다.캐스트 만들기명령. (이것은 일반적으로 새로운 데이터 유형을 정의하는 것과 함께 수행됩니다. 내장 유형 사이의 캐스트 세트는 신중하게 제작되었으며 변경되지 않습니다.)
Parser가 제공하는 추가 휴리스틱은 암시 적 캐스트가있는 유형의 그룹간에 적절한 캐스팅 동작의 결정을 향상시킬 수 있습니다. 데이터 유형은 여러 기본으로 나뉩니다유형 카테고리포함부울, 숫자, String, 비트 스트링, dateTime, 타임 스팬, 기하학적, 네트워크및 사용자 정의. (목록 참조표 48-53; 그러나 사용자 정의 유형 카테고리를 만들 수도 있습니다.) 각 카테고리 내에는 하나 이상이있을 수 있습니다.선호 유형, 가능한 유형의 선택이있을 때 선호됩니다. 선호하는 유형을 신중하게 선택하고 사용 가능한 암시 적 캐스트를 통해 모호한 표현 (여러 후보 구문 분석 솔루션을 가진 사람들)이 유용한 방식으로 해결 될 수 있습니다..
모든 유형 변환 규칙은 여러 원칙을 염두에두고 설계되었습니다.
암시 적 전환에는 놀라거나 예측할 수없는 결과가 없어야합니다.
14598_14920
또한 쿼리가 일반적으로 함수에 대한 암시 적 변환이 필요한 경우, 사용자가 올바른 인수 유형이있는 새 기능을 정의하는 경우, 구문 분석기는이 새로운 기능을 사용하고 더 이상 이전 함수를 사용하기 위해 암시 적 변환을 수행하지 않아야합니다.