이 문서는 지원되지 않는 PostgreSQL 버전에 대한 것입니다.
당신은 다음과 같은 페이지를 보고 싶을 수도 있습니다.PostgreSQL : 문서 : 17 : 젠 토토 생성버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.

만들기 무지개 토토

이름

CREATE CAST -- 새 무지개 토토 정의

시놉시스

무지개 토토 생성(source_typeAS대상_유형)
    기능 포함함수_이름 (argument_type[, ...])
    [ 과제로 | 묵시적으로 ]

무지개 토토 만들기(source_typeAS대상_유형)
    기능 없음
    [ 과제로 | 묵시적으로 ]

무지개 토토 만들기(source_typeAS대상_유형)
    INOUT 포함
    [ 과제로 | 묵시적으로 ]

설명

무지개 토토 만들기새 무지개 토토를 정의합니다. 에이 Cast는 두 데이터 간의 변환을 수행하는 방법을 지정합니다. 유형. 예를 들면:

캐스트 선택(42 AS float8);

정수 상수 42를 유형으로 변환합니다.float8이전에 지정된 함수를 호출하여, 이 경우에는float8(int4). (아니면 적합한 무지개 토토가 정의되어 있으면 변환이 실패합니다.)

두 가지 유형이 가능합니다.바이너리 강제형, 이는 변환이 수행될 수 있음을 의미합니다."무료로"어떤 함수도 호출하지 않고. 이 해당 값은 동일한 내부 코드를 사용해야 합니다. 표현. 예를 들어, 유형텍스트그리고varchar바이너리입니다. 양방향으로 강제할 수 있습니다. 이진 강제성이 반드시 필요한 것은 아닙니다. 대칭 관계. 예를 들어,xml텍스트수행 가능 현재 구현에서는 무료이지만 반대 방향 최소한 구문 검사를 수행하는 함수가 필요합니다. (두 양방향으로 바이너리 강제 변환이 가능한 유형을 다음과 같이 지칭하기도 합니다. 바이너리 호환 가능.)

캐스트를 다음과 같이 정의할 수 있습니다.I/O 전환 무지개 토토다음을 사용하여인아웃 포함구문. I/O 변환 캐스트는 다음을 호출하여 수행됩니다. 소스 데이터 유형의 출력 함수 및 결과 전달 대상 데이터 유형의 입력 함수에.

기본적으로 무지개 토토는 명시적 무지개 토토에 의해서만 호출될 수 있습니다. 요청은 명시적입니다.무지개 토토(xAS유형이름)또는x::유형 이름구조물.

무지개 토토가 표시된 경우AS 할당그러면 값을 할당할 때 암시적으로 호출될 수 있습니다. 대상 데이터 유형의 열입니다. 예를 들어, 다음과 같이 가정합니다.foo.f1유형의 열입니다.텍스트, 다음:

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

유형에서 무지개 토토하는 경우 허용됩니다.정수입력하려면텍스트표시됨AS 할당, 그렇지 않으면 그렇지 않습니다. (우리는 일반적으로 용어를 사용합니다과제 무지개 토토이런 종류의 캐스트를 설명합니다.)

무지개 토토가 표시된 경우암시적으로그러면 어떤 상황에서든 암시적으로 호출될 수 있습니다. 할당 또는 표현식 내부적으로. (우리는 일반적으로 다음을 사용합니다. 용어암시적 무지개 토토이런 종류를 설명하기 위해 캐스트.) 예를 들어 다음 쿼리를 고려해보세요.

선택 2 + 4.0;

파서는 처음에 상수를 유형으로 표시합니다.정수그리고숫자각각. 없습니다정수 + 숫자연산자 시스템 카탈로그에 있지만 다음이 있습니다.숫자 + 숫자연산자. 따라서 다음과 같은 경우 쿼리가 성공합니다. 캐스트정수숫자사용 가능하며 표시됨암시적으로—사실 그렇습니다. 파서는 암시적 무지개 토토를 적용하고 쿼리를 마치 그랬던 것처럼 해결합니다. 작성됨

SELECT CAST(2 AS 숫자) + 4.0;

이제 카탈로그는 다음의 캐스트도 제공합니다.숫자정수. 그렇다면 출연진이 표시되었습니다암시적으로— 그것은 그렇지 않습니다. 그러면 파서는 다음 중 하나를 선택해야 합니다. 위의 해석과 캐스팅의 대안숫자상수정수그리고 적용정수 + 정수연산자. 이에 대한 지식이 부족함 선호하는 것을 선택하면 쿼리를 포기하고 선언합니다. 모호하다. 두 캐스트 중 하나만 암시적이라는 사실은 다음과 같습니다. 우리가 파서에게 다음의 해결을 선호하도록 가르치는 방식 혼합숫자-그리고-정수다음으로 표현숫자; 그것에 대한 내장된 지식은 없습니다.

캐스트를 암시적으로 표시하는 것에 대해서는 보수적인 것이 현명합니다. 암시적 캐스팅 경로가 너무 많으면 다음이 발생할 수 있습니다.PostgreSQL놀라움을 선택하다 명령을 해석하지 못하거나 명령을 해석할 수 없는 경우 다양한 해석이 가능하기 때문입니다. 에이 경험상 좋은 법칙은 캐스트를 암시적으로만 호출 가능하게 만드는 것입니다. 유형 간 정보 보존 변환을 위해 동일한 일반 유형 카테고리. 예를 들어,int2int4합리적으로 그럴 수 있습니다. 암시적이지만 무지개 토토는float8int4아마도 할당 전용이어야 합니다. 다음과 같은 교차 유형 카테고리 캐스트텍스트int4, 명시적 전용으로 만드는 것이 가장 좋습니다.

참고:가끔 유용성 또는 여러 암시적 제공을 위한 표준 준수 이유 유형 집합 간에 캐스팅하여 모호성을 초래합니다. 위와 같이 피할 수 없습니다. 파서에는 대체 기능이 있습니다. 휴리스틱 기반유형 카테고리그리고선호되는 유형도움이 될 수 있는 그러한 경우 원하는 동작을 제공하십시오. 참조유형 생성더 보기 정보.

캐스트를 생성하려면 소스 또는 대상 데이터 유형. 바이너리 강제형 캐스트를 생성하려면 다음을 수행해야 합니다. 슈퍼유저. (이러한 제한은 잘못된 바이너리 강제 변환이 가능한 캐스트 변환은 쉽게 충돌할 수 있습니다. 서버.)

매개변수

source_type

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

대상_유형

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

함수_이름(argument_type [, ...])

캐스트를 수행하는 데 사용되는 함수입니다. 함수 이름 스키마에 적합할 수 있습니다. 그렇지 않은 경우 해당 기능은 다음과 같습니다. 스키마 검색 경로에서 조회했습니다. 함수의 결과 데이터 유형은 캐스트의 대상 유형과 일치해야 합니다. 그 인수는 아래에서 논의됩니다.

기능 없음

소스 유형이 바이너리 강제 변환이 가능함을 나타냅니다. 대상 유형이므로 다음을 수행하는 데 기능이 필요하지 않습니다. 캐스팅.

인아웃 포함

무지개 토토가 I/O 변환 무지개 토토임을 나타냅니다. 소스의 출력 함수를 호출하여 수행됨 데이터 유형을 입력하고 결과를 입력 함수에 전달합니다. 대상 데이터 유형입니다.

할당으로

캐스트가 암시적으로 호출될 수 있음을 나타냅니다. 할당 컨텍스트.

암시적으로

캐스트가 모든 항목에서 암시적으로 호출될 수 있음을 나타냅니다. 맥락.

Cast 구현 함수는 1~3개의 인수를 가질 수 있습니다. 첫 번째 인수 유형은 동일하거나 이진 강제 변환이 가능해야 합니다. 무지개 토토의 소스 유형에서. 두 번째 인수(있는 경우)는 유형이어야 합니다.정수; 유형을 수신합니다. 대상 유형과 연관된 수정자 또는-1아무것도 없으면. 세 번째 인수인 경우 존재하며 유형이어야 합니다.부울; 그것은 받는다무지개 토토가 명시적 무지개 토토인 경우,거짓그렇지 않으면. (이상하게도 SQL은 표준은 명시적 및 암시적에 대해 서로 다른 동작을 요구합니다. 경우에 따라 캐스팅합니다. 이 인수는 다음과 같은 함수에 제공됩니다. 이러한 캐스트를 구현해야 합니다. 디자인하는 것은 권장하지 않습니다. 이것이 중요하므로 자신만의 데이터 유형을 선택하세요.)

캐스트 함수의 반환 유형은 다음과 동일해야 합니다. 캐스트의 대상 유형으로 바이너리 강제 변환 가능합니다.

일반적으로 캐스트에는 소스와 대상 데이터가 달라야 합니다. 유형. 그러나 동일한 캐스트를 선언하는 것은 허용됩니다. 캐스트 구현 기능이 있는 경우 소스 및 대상 유형 하나 이상의 인수로. 이는 다음을 나타내는 데 사용됩니다. 시스템 카탈로그의 유형별 길이 강제 함수. 명명된 함수는 해당 유형의 값을 강제로 변환하는 데 사용됩니다. 두 번째 인수로 제공되는 유형 수정자 값입니다.

캐스트에 소스와 대상 유형이 다르고 둘 이상의 인수를 취하는 함수는 다음을 나타냅니다. 한 유형에서 다른 유형으로 변환하고 길이를 적용 한 단계의 강제. 그러한 항목을 사용할 수 없는 경우, 유형 수정자를 사용하는 유형으로의 강제 변환에는 두 단계가 포함됩니다. 하나는 데이터 유형 간 변환을 위한 것이고, 다른 하나는 수정자.

참고

사용PostgreSQL : 문서 : 9.0 : 드롭 토토 결과제거하다 사용자 정의 캐스트.

두 유형을 모두 변환할 수 있기를 원한다면 기억하세요 두 가지 방법으로 명시적으로 무지개 토토를 선언해야 합니다.

일반적으로 사이에 캐스트를 생성할 필요는 없습니다. 사용자 정의 유형 및 표준 문자열 유형(텍스트, varchar문자(n)뿐만 아니라 문자열에 포함되도록 정의된 사용자 정의 유형 카테고리).포스트그레SQL제공 이를 위한 자동 I/O 변환 캐스트입니다. 자동으로 캐스팅됩니다. 문자열 유형은 할당 캐스트로 처리되지만 자동 문자열 유형의 캐스트는 명시적 전용입니다. 이것을 재정의할 수 있습니다. 자동 캐스트를 대체하기 위해 자체 캐스트를 선언하여 동작 하지만 일반적으로 그렇게 하는 유일한 이유는 표준보다 더 쉽게 호출할 수 있도록 변환 할당 전용 또는 명시적 전용 설정입니다. 또 다른 가능한 이유 전환이 이전과 다르게 동작하기를 원한다는 것입니다. 유형의 I/O 기능; 하지만 그것만으로도 충분히 놀랍습니다. 좋은 생각인지 다시 한번 생각해봐야 합니다. (작은 내장 유형의 수는 실제로 다른 동작을 가지고 있습니다 변환의 경우 주로 SQL 요구 사항으로 인해 표준.)

이전PostgreSQL7.3, 데이터 유형과 이름이 같은 모든 함수가 반환됨 해당 데이터 유형을 사용하고 다른 유형의 인수 하나를 취했습니다. 자동으로 캐스트 기능을 수행합니다. 이 컨벤션은 폐기되었습니다 스키마 도입에 직면하여 다음을 수행할 수 있습니다. 시스템 카탈로그에서 바이너리 강제 변환이 가능한 캐스트를 나타냅니다. 는 내장 형변환 함수는 여전히 이 이름 지정 체계를 따르지만 시스템 카탈로그에 캐스트로 표시되어야 합니다.pg_cast또한.

필수는 아니지만 계속해서 수행하는 것이 좋습니다. 캐스트 구현을 명명하는 이 오래된 규칙을 따르십시오. 대상 데이터 유형 이후에 작동합니다. 많은 사용자들이 익숙합니다. 함수 스타일 표기법을 사용하여 데이터 유형을 캐스팅할 수 있습니다. 즉유형이름(x). 이 표기법은 사실 더 이상 아무것도 아닙니다. 캐스트 구현 함수를 호출하는 것 이상입니다. 그것은이다 특별히 캐스트로 취급되지 않습니다. 변환 기능이 다음과 같은 경우 이 협약을 지지하도록 지명되지 않았다면 당신은 놀랄 것입니다 사용자. 이후PostgreSQL허용합니다 다른 인수로 동일한 함수 이름을 오버로드함 유형이므로 다중 변환에 어려움이 없습니다. 모두 대상 유형을 사용하는 다양한 유형의 함수 이름.

참고:실제로 이전 단락은 지나치게 단순화: 두 가지 경우가 있습니다. 함수 호출 구성은 캐스트 요청으로 처리됩니다. 실제 기능과 일치시키지 않고. 만약 함수 호출이름(x)은 기존 항목과 정확히 일치하지 않습니다. 기능하지만이름이것은 데이터 유형의 이름 및pg_cast유형에서 이 유형에 대한 바이너리 강제 변환을 제공합니다. 의x, 그러면 호출은 다음과 같습니다. 이진 강제형 캐스트로 해석됩니다. 이 예외가 발생합니다. 따라서 바이너리 강제 변환이 다음을 사용하여 호출될 수 있습니다. 기능적 구문은 기능이 부족하더라도 마찬가지입니다. 마찬가지로 없으면pg_cast항목이지만 캐스트는 문자열 유형으로 또는 문자열 유형에서 이루어집니다. 호출은 I/O 변환 캐스트로 해석됩니다. 이 예외를 사용하면 I/O 변환 캐스트를 다음을 사용하여 호출할 수 있습니다. 함수형 구문.

유형에서 무지개 토토 할당을 생성하려면비긴트입력하려면int4사용 중 기능int4(bigint):

함수 int4(bigint)를 할당으로 사용하여 CAST(bigint AS int4) 생성;

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

호환성

무지개 토토 생성명령은 다음을 준수합니다SQL표준, 제외 SQL은 바이너리 강제 변환 유형 또는 추가 항목을 제공하지 않습니다. 구현 함수에 대한 인수입니다.AS 암시적PostgreSQL확장 프로그램도 마찬가지입니다.