지원 버전 :현재(17) /16 / 15 / 14 / 13
개발 버전 :18 / Devel
지원되지 않은 버전 :12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3

캐스트 만들기

캐스트 만들기 - 새 캐스트 정의

시놉시스

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로 정의 할 수 있습니다cách đọc kèo bóng đá 변환 캐스트사용하여inout구문. cách đọc kèo bóng đá 변환 캐스트는 소스 데이터 유형의 출력 기능을 호출하고 결과 문자열을 대상 데이터 유형의 입력 함수로 전달하여 수행됩니다. 많은 일반적인 경우,이 기능은 전환을 위해 별도의 캐스트 함수를 작성할 필요가 없습니다. cách đọc kèo bóng đá 변환 캐스트는 일반 기능 기반 캐스트와 동일하게 행동합니다. 구현 만 다릅니다.

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

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

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

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

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

2 + 4.0; 선택

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

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

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

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

Note

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

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

매개 변수

source_type

캐스트의 소스 데이터 유형의 이름.

target_type

캐스트의 대상 데이터 유형의 이름.

function_name[(argument_type[, ...])]

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

기능없이

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

inout

캐스트는 소스 데이터 유형의 출력 기능을 호출하여 수행 한 cách đọc kèo bóng đá 변환 캐스트임을 나타냅니다. 결과 문자열을 대상 데이터 유형의 입력 함수로 전달합니다..

과제

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

암시 적

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

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

캐스트 함수의 반환 유형은 캐스트의 대상 유형과 동일하거나 이진을 통합 할 수 있어야합니다.

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

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

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

노트

use드롭 캐스트사용자 정의 캐스트를 제거하려면

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

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

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

Note

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

note

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

예제

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

함수 int4 (bigint)가 할당 된 상태로 캐스트 (bigint as int4) 만들기;

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

호환성

the캐스트 만들기명령은에 부합합니다.PostgreSQL: Tài liệu:cách đọc kèo bóng đá이 이진 통합 유형 또는 구현 함수에 대한 추가 인수에 대한 조항을 제외하고는 제외하고 표준.암시 적is​​PostgreSQL확장도.

정정 제출

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