10.1. 개요#

SQL는 강력하게 입력 한 언어입니다. 즉, 모든 데이터 항목에는 동작을 결정하고 사용 허용되는 관련 데이터 유형이 있습니다.PostgreSQL다른 것보다 더 일반적이고 유연한 확장 가능한 유형 시스템이 있습니다SQL구현. 따라서 대부분의 유형 변환 동작PostgreSQL는 임시 휴리스틱보다는 일반적인 규칙에 의해 관리됩니다. 이를 통해 사용자 정의 유형에서도 혼합형 표현식을 사용할 수 있습니다.

PostgreSQL스캐너/파서는 어휘 요소를 정수, 비 인구 번호, 문자열, 식별자 및 키워드의 5 가지 기본 범주로 나눕니다. 대부분의 비 숫자 유형의 상수는 먼저 문자열로 분류됩니다. 그만큼SQL언어 정의는 문자열로 유형 이름을 지정할 수 있으며이 메커니즘을 사용할 수 있습니다PostgreSQL파서를 올바른 경로로 시작합니다. 예를 들어, 쿼리 :

텍스트 '원점'을 "레이블", 포인트 '(0,0)' 'value "로 선택합니다.

 라벨 | 값
--------+-------
 원산지 | (0,0)
(1 행)

유형의 2 개의 문자 상수가 있습니다텍스트and포인트. If a type is not specified for a stri사설 토토 사이트 literal, then the placeholder type알 수없는초기에 할당되어 다음 단계에서 설명합니다.

4 가지 기본 사항이 있습니다SQL|사설 토토 사이트파서 :

함수 호출

많은PostgreSQL유형 시스템은 풍부한 기능 세트 주위에 구축되었습니다. 기능은 하나 이상의 인수를 가질 수 있습니다. 부터PostgreSQL함수 과부하를 허용하면 기능 이름만으로 호출 될 함수를 고유하게 식별하지 않습니다. 파서는 제공된 인수의 데이터 유형에 따라 올바른 함수를 선택해야합니다.

Operators

PostgreSQL접두사 (일회용) 연산자와 디스 픽스 (2 학년) 연산자가있는 표현식을 허용합니다. 함수와 마찬가지로 연산자를 과부하 할 수 있으므로 올바른 연산자를 선택하는 것과 동일한 문제가 있습니다.

가치 저장소

SQL 삽입업데이트진술은 표현식 결과를 표에 배치합니다. 진술의 표현은 대상 열의 유형과 일치하고 아마도 변환되어야합니다.

Union, CASE및 관련 구성

모든 쿼리가 Unionized의 결과로 결과select명령문은 단일 열 세트에 표시되어 있어야합니다. 각각의 결과 유형select절은 일치하고 균일 한 세트로 변환해야합니다. 마찬가지로 a의 결과 표현case구성을 공통 유형으로 변환하여caseexpression as a whole has a known output type. 와 같은 다른 구성 요소배열 []and the가장 큰and최소함수, 마찬가지로 여러 하위 표현에 대한 공통 유형을 결정해야합니다.

시스템 카탈로그는 어떤 변환 또는에 대한 정보를 저장합니다.캐스트, 어떤 데이터 유형과 해당 변환을 수행하는 방법 사이에 존재합니다. 사용자가 추가 캐스트를 추가 할 수 있습니다.캐스트 만들기명령. (이것은 일반적으로 새로운 데이터 유형을 정의하는 것과 함께 수행됩니다. 내장 유형 사이의 캐스트 세트는 신중하게 제작되었으며 변경되지 않습니다.)

파서가 제공하는 추가 휴리스틱은 암시 적 캐스트가있는 유형 그룹 간의 적절한 캐스팅 거동을 개선 할 수 있습니다. 데이터 유형은 여러 기본으로 나뉩니다유형 카테고리포함부울, 숫자, Stri사설 토토 사이트, Bitstri사설 토토 사이트, DateTime, Timespan, 기하학적, 네트워크및 사용자 정의. (목록 참조표 51.65; 그러나 사용자 정의 유형 카테고리를 만들 수도 있습니다.) 각 카테고리 내에는 하나 이상이있을 수 있습니다.선호 유형. 가능한 유형의 선택이있을 때 선호됩니다. 선호하는 유형을 신중하게 선택하고 사용 가능한 암시 적 캐스트를 통해 모호한 표현 (여러 후보 구문 분석 솔루션을 가진 사람들)이 유용한 방식으로 해결 될 수 있습니다..

모든 유형 변환 규칙은 여러 원칙을 염두에두고 설계되었습니다.

  • 암시 적 전환에는 놀라운 결과가 없거나 예측할 수없는 결과가 없어야합니다.

  • 쿼리에 암시 적 유형 변환이 필요하지 않은 경우 파서 또는 집행자에 추가 오버 헤드가 없어야합니다. 즉, 쿼리가 잘 구성되어 있고 유형이 이미 일치하는 경우, 파서에서 여분의 시간을 소비하지 않고 쿼리에 불필요한 암시 적 변환 호출을 도입하지 않고 쿼리가 실행되어야합니다..

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

정정 제출

문서에 맞지 않는 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 귀하의 경험 또는 추가 설명이 필요합니다. 사용이 양식문서 문제를보고하려면