윈 토토 만들기

윈 토토 만들기 - 새 윈 토토 정의

시놉시스

CREATE CAST (source_typeastarget_type)
    함수function_name[(argument_type[, ...])]
    [과제 | 암시 적]

CAST CAST (source_typeastarget_type)
    기능없이
    [과제 | 암시 적]

CAST CAST (source_typeastarget_type)
    Inout과 함께
    [과제 | 암시 적으로]

설명

윈 토토 만들기새 출연진을 정의합니다. 윈 토토는 두 데이터 유형 사이의 변환을 수행하는 방법을 지정합니다. 예를 들어,

CAST (42 AS float8); 선택

정수 상수 42를 유형으로 변환float8이전에 지정된 기능을 호출 하여이 경우float8 (int4). (적절한 윈 토토가 정의되지 않으면 변환이 실패합니다.)

두 가지 유형이 될 수 있습니다이진 강압, 이는 변환을 수행 할 수 있음을 의미무료함수를 호출하지 않고. 이를 위해서는 해당 값이 동일한 내부 표현을 사용해야합니다. 예를 들어, 유형텍스트Varchar이진은 두 가지 방법으로 강요 할 수 있습니다. 이진 강압은 반드시 대칭 관계는 아닙니다. 예를 들어, 윈 토토XMLto텍스트현재 구현에서 무료로 수행 할 수 있지만, 역 방향에는 최소한 구문 검사를 수행하는 함수가 필요합니다. (이진 강압이있는 두 가지 유형 모두 이진 호환이라고도합니다.)

윈 토토를 A로 정의 할 수 있습니다I/O 변환 윈 토토사용하여inout구문. I/O 변환 윈 토토는 소스 데이터 유형의 출력 기능을 호출하고 결과 문자열을 대상 데이터 유형의 입력 함수로 전달하여 수행됩니다. 많은 일반적인 경우,이 기능은 전환을 위해 별도의 윈 토토 함수를 작성할 필요가 없습니다. I/O 변환 윈 토토는 일반 기능 기반 윈 토토와 동일하게 행동합니다. 구현 만 다릅니다.

기본적으로, 명시 적 윈 토토 요청에 의해서만 윈 토토를 호출 할 수 있습니다.cast (xastypename)또는x::typename구성.

윈 토토가 표시된 경우과제그러면 대상 데이터 유형의 열에 값을 할당 할 때 암시 적으로 호출 할 수 있습니다. 예를 들어, 그렇게 가정foo.f1유형의 열텍스트, 다음 :

foo (f1) 값 (42)에 삽입;

유형에서 윈 토토가 허용됩니다Integerto Type텍스트표시과제, 그렇지 않으면. (우리는 일반적으로 용어를 사용합니다과제 윈 토토이런 종류의 윈 토토를 설명하려면)

윈 토토가 표시된 경우암시 적그러면 과제 또는 내부적으로 표현식에서 어떤 맥락에서도 암시 적으로 호출 될 수 있습니다. (우리는 일반적으로 용어를 사용합니다암시 적 윈 토토이런 종류의 윈 토토를 설명하려면) 예를 들어,이 쿼리를 고려하십시오.

선택 2 + 4.0;

파서는 처음에 상수를 유형으로 표시합니다Integerand숫자각각. 없음정수 + 숫자시스템 카탈로그의 연산자이지만 A가 있습니다.숫자 + 숫자운영자. 따라서 쿼리는에서 윈 토토되면 성공합니다.정수to숫자사용 가능하고 표시암시 적- 실제로. 파서는 암시 적 윈 토토를 적용하고 쿼리가 작성된 것처럼 쿼리를 해결합니다

Cast (2 AS 숫자) + 4.0; 선택

이제 카탈로그는에서 윈 토토를 제공합니다.숫자toInteger. 그 윈 토토가 표시되면암시 적- 그렇지 않습니다 - 파서는 위의 해석과 주조의 대안 중에서 선택하는 데 직면하게됩니다.숫자Constant to정수그리고 적용Integer + Integer연산자. 선호하는 선택에 대한 지식이 부족하여 쿼리를 모호하게 포기하고 선언 할 것입니다. 두 윈 토토 중 하나만 암시 적이라는 사실은 우리가 파서에게 혼합 된 해상도를 선호하도록 가르치는 방법입니다.숫자-and-Integer표현 AS숫자; 그것에 대한 지식이 내장되어 있지 않습니다.

윈 토토를 암시 적으로 표시하는 것에 대해 보수적 인 것이 현명합니다. 암시 적 주조 경로의 과잉이 유발할 수 있습니다PostgreSQL명령에 대한 놀라운 해석을 선택하거나 여러 가지 가능한 해석이 있기 때문에 명령을 전혀 해결할 수 없습니다. 경험의 좋은 규칙은 동일한 일반 유형 범주의 유형간에 정보 보존 변환을 위해 암시 적으로 만 윈 토토를 촉구 할 수 있도록하는 것입니다. 예를 들어, 윈 토토int2toint4합리적으로 암시적일 수 있지만float8toint4아마도 과제 전용이어야합니다. 과 같은 크로스 유형 카테고리 윈 토토텍스트toint4, 명시 적 전용이 가장 좋습니다.

Note

때때로 유용성 또는 표준 준수 이유는 일련의 유형 사이에 여러 가지 암시 적 윈 토토를 제공하는 것이 필요하며, 위와 같이 피할 수없는 모호성을 초래합니다. 파서는에 기반한 폴백 휴리스틱을 가지고 있습니다.유형 카테고리and선호 유형그러한 경우에 원하는 행동을 제공하는 데 도움이 될 수 있습니다. 보다유형 생성자세한 내용은

윈 토토를 만들 수 있으려면 소스 또는 대상 데이터 유형을 소유하고 있어야합니다usage다른 유형의 특권. 이진적 대응하는 윈 토토를 만들려면 슈퍼 사용자가되어야합니다. (이 제한은 잘못된 이진 통합 윈 토토 변환이 서버에 쉽게 충돌 할 수 있기 때문에 이루어집니다.)

매개 변수

source_type

윈 토토의 소스 데이터 유형의 이름.

target_type

윈 토토의 대상 데이터 유형의 이름.

function_name[(argument_type[, ...])

윈 토토를 수행하는 데 사용되는 함수. 함수 이름은 스키마 자격을 얻을 수 있습니다. 그렇지 않은 경우 스키마 검색 경로에서 함수가 조회됩니다. 함수의 결과 데이터 유형은 대상 유형과 일치해야합니다. 그것의 주장은 아래에서 논의되어 있습니다. 인수 목록이 지정되지 않으면 스키마에서 함수 이름이 고유해야합니다.

함수 없음

소스 유형이 대상 유형에 이진을 통합 할 수 있으므로 윈 토토를 수행하는 데 기능이 필요하지 않음을 나타냅니다.

with inout

| 윈 토토는 소스 데이터 유형의 출력 기능을 호출하여 수행 한 I/O 변환 윈 토토임을 나타냅니다. 결과 문자열을 대상 데이터 유형의 입력 함수로 전달합니다..

과제

과제 컨텍스트에서 윈 토토가 암시 적으로 호출 될 수 있음을 나타냅니다.

암시 적

어떤 상황에서도 윈 토토가 암시 적으로 호출 될 수 있음을 나타냅니다.

윈 토토 구현 함수는 1 ~ 3 개의 인수를 가질 수 있습니다. 첫 번째 인수 유형은 윈 토토의 소스 유형과 동일하거나 이진을 통합 할 수 있어야합니다. 두 번째 인수는 존재하는 경우 유형이어야합니다정수; 대상 유형과 관련된 유형 수정자를 수신하거나-1없는 경우. 세 번째 인수는 존재하는 경우 유형이어야합니다부울; 수신true윈 토토가 명시적인 윈 토토 인 경우false그렇지 않으면. (기괴하게, SQL 표준은 경우에 따라 명시적이고 암시적인 윈 토토에 대해 다른 동작을 요구합니다.이 주장은 그러한 윈 토토를 구현 해야하는 기능에 제공되어 있습니다.이 문제가 중요하도록 고유 한 데이터 유형을 설계하는 것이 좋습니다.).

윈 토토 함수의 리턴 유형은 윈 토토의 대상 유형과 동일하거나 이진을 통합 할 수 있어야합니다.

일반적으로 윈 토토는 다른 소스와 대상 데이터 유형을 가져야합니다. 그러나 하나 이상의 인수가있는 윈 토토 구현 기능이있는 경우 동일한 소스 및 대상 유형이있는 윈 토토를 선언 할 수 있습니다. 이것은 시스템 카탈로그에서 유형 별 길이 강요 기능을 나타내는 데 사용됩니다. 명명 된 함수는 두 번째 인수에 의해 주어진 유형 수정 자 값으로 유형의 값을 강요하는 데 사용됩니다.

윈 토토가 다른 소스와 대상 유형과 하나 이상의 인수를 취하는 함수를 갖는 경우, 한 유형에서 다른 유형에서 다른 유형으로 변환하고 단일 단계에서 길이 강요를 적용하는 것을 지원합니다. 그러한 항목이 없으면 유형 수정자를 사용하는 유형에 대한 강요는 두 개의 윈 토토 단계가 포함됩니다. 하나는 데이터 유형 사이에서 1 초를 변환하고 1 초는 수정자를 적용합니다.

도메인 유형에 대한 윈 토토는 현재 영향을 미치지 않습니다. 도메인으로 또는 주조는 기본 유형과 관련된 윈 토토를 사용합니다.

노트

use드롭 윈 토토사용자 정의 윈 토토를 제거하려면

유형을 모두 변환 할 수 있으려면 두 가지 방법을 두 가지 방법으로 선언해야합니다.

일반적으로 사용자 정의 유형과 표준 문자열 유형 사이에 윈 토토를 생성 할 필요는 없습니다 (텍스트, Varcharchar (n), 문자열 카테고리에 정의 된 사용자 정의 유형)..PostgreSQL이를 위해 자동 I/O 변환 윈 토토를 제공합니다. 자동 윈 토토 대 문자열 유형은 할당 윈 토토로 취급되는 반면 문자열 유형의 자동 윈 토토는 명시 적 전용입니다. 자동 윈 토토를 대체하기 위해 자신의 윈 토토를 선언 하여이 동작을 무시할 수 있지만, 일반적으로 그렇게해야 할 유일한 이유는 표준 할당 전용 또는 명시 적 전용 설정보다 변환이 더 쉽게 호출 될 수 있기 때문입니다. 또 다른 가능한 이유는 변환이 유형의 I/O 함수와 다르게 행동하기를 원하기 때문입니다. 그러나 그것은 좋은 생각인지에 대해 두 번 생각해야한다는 것은 충분히 놀라운 일입니다. (소수의 내장 유형은 실제로 SQL 표준의 요구 사항으로 인해 변환에 대한 동작이 다릅니다.)

필요하지는 않지만 대상 데이터 유형 이후 윈 토토 구현 기능의 이름을 지정하는이 기존 협약을 계속 따르는 것이 좋습니다. 많은 사용자가 기능 스타일 표기법을 사용하여 데이터 유형을 윈 토토 할 수 있습니다. 즉typename(x). 이 표기법은 사실 윈 토토 구현 함수의 호출보다 훨씬 적거나 그 이상입니다. 특별히 윈 토토로 취급되지는 않습니다. 이 컨벤션을 지원하기 위해 전환 기능이 지명되지 않은 경우 사용자를 놀라게 할 것입니다. 부터postgresql다른 인수 유형으로 동일한 함수 이름을 과부하 할 수 있으므로 대상 유형의 이름을 사용하는 다른 유형의 여러 변환 기능을 갖는 데 어려움이 없습니다..

Note

실제로 앞의 단락은 지나치게 단순화 된 것입니다. 함수 콜 구성이 실제 함수와 일치하지 않고 윈 토토 요청으로 취급되는 두 가지 사례가 있습니다. 함수 호출 인 경우이름(x)는 기존 기능과 정확히 일치하지 않지만이름데이터 유형의 이름이며PG_CAST| |x이 예외는 기능이 부족하더라도 기능적 구문을 사용하여 이진 통합 윈 토토를 호출 할 수 있도록 이루어집니다. 마찬가지로, 없다면PG_CAST입장이지만 윈 토토는 문자열 유형에 있거나 이루어지면 호출은 I/O 변환 윈 토토로 해석됩니다. 이 예외는 기능 구문을 사용하여 I/O 변환 윈 토토를 호출 할 수 있습니다.

Note

예외에 대한 예외도 있습니다. 복합 유형에서 문자열 유형으로의 I/O 변환 윈 토토는 기능 구문을 사용하여 호출 할 수 없지만 명시 적 윈 토토 구문으로 작성해야합니다 (윈 토토또는::표기법). 이 예외는 자동으로 제공되는 I/O 변환 윈 토토를 도입 한 후 함수 또는 열 참조가 의도 된 경우 실수로 그러한 윈 토토를 호출하기가 너무 쉬워 졌기 때문에 추가되었습니다..

유형에서 할당 윈 토토를 작성하려면bigintto Typeint4함수 사용int4 (bigint):

함수 int4 (bigint)가 할당 된 상태로 윈 토토 (bigint as int4)를 생성;

(이 윈 토토는 이미 시스템에서 사전 정의되어 있습니다.)

호환성

the윈 토토 만들기명령은에 부합합니다.SQLSQL이 이진 통합 유형 또는 구현 함수에 대한 추가 인수에 대한 조항을 제외하고는 제외하고 표준.암시 적isPostgreSQL확장도.

정정 제출

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