토토 핫 생성(소스 유형AS대상 유형)
    기능 포함기능 이름 (argtypes)
    [ 과제로 | 묵시적으로 ]
토토 핫 만들기(소스 유형AS대상 유형)
    기능 없음
    [ 과제로 | 묵시적으로 ]
토토 핫 만들기새 토토 핫를 정의합니다. 에이 Cast는 두 데이터 간의 변환을 수행하는 방법을 지정합니다. 유형. 예를 들면:
캐스트 선택(42 AS float8);
정수 상수 42를 유형으로 변환합니다.float8이전에 지정된 함수를 호출하여, 이 경우에는float8(int4). (아니면 적합한 토토 핫가 정의되어 있으면 변환이 실패합니다.)
두 가지 유형이 가능합니다.바이너리 호환 가능, 이는 서로 변환될 수 있음을 의미합니다."무료로"호출하지 않고 기능. 이를 위해서는 해당 값이 동일한 값을 사용해야 합니다. 내부 표현. 예를 들어, 유형텍스트그리고varchar바이너리입니다. 호환됩니다.
기본적으로 토토 핫는 명시적 토토 핫에 의해서만 호출될 수 있습니다. 요청은 명시적입니다.토토 핫(xAS유형 이름)또는x::유형이름구조물.
토토 핫가 표시된 경우AS 할당그러면 값을 할당할 때 암시적으로 호출될 수 있습니다. 대상 데이터 유형의 열입니다. 예를 들어, 다음과 같이 가정합니다.foo.f1유형의 열입니다.텍스트, 다음:
foo(f1) 값(42)에 삽입;
유형에서 토토 핫하는 경우 허용됩니다.정수입력하려면텍스트표시됨할당으로, 그렇지 않으면 그렇지 않습니다. (우리는 일반적으로 용어를 사용합니다과제 토토 핫이런 종류의 캐스트를 설명합니다.)
토토 핫가 표시된 경우암시적으로그러면 어떤 상황에서든 암시적으로 호출될 수 있습니다. 할당 또는 표현식 내부적으로. (우리는 일반적으로 다음을 사용합니다. 용어암시적 토토 핫이런 종류를 설명하려면 캐스트.) 예를 들어 다음 쿼리를 고려해보세요.
선택 2 + 4.0;
파서는 처음에 상수를 유형으로 표시합니다.정수그리고숫자각각. 없습니다정수 + 숫자연산자 시스템 카탈로그에 있지만 다음이 있습니다.숫자 + 숫자연산자. 따라서 다음과 같은 경우 쿼리가 성공합니다. 캐스트정수에숫자사용 가능하며 표시됨암시적으로—사실 그렇습니다. 파서는 암시적 토토 핫를 적용하고 쿼리를 마치 그랬던 것처럼 해결합니다. 작성됨
SELECT CAST( 2 AS 숫자 ) + 4.0;
이제 카탈로그는 다음의 캐스트도 제공합니다.숫자에정수. 그렇다면 출연진이 표시되었습니다암시적으로— 그것은 그렇지 않은 경우 파서는 다음 중 하나를 선택해야 하는 상황에 직면하게 됩니다. 위의 해석과 캐스팅의 대안숫자상수정수그리고 적용정수 + 정수연산자. 이에 대한 지식이 부족함 선호하는 것을 선택하면 쿼리를 포기하고 선언합니다. 모호하다. 두 캐스트 중 하나만 암시적이라는 사실은 다음과 같습니다. 우리가 파서에게 다음의 해결을 선호하도록 가르치는 방식 혼합숫자-그리고-정수다음으로 표현숫자; 그것에 대한 내장된 지식은 없습니다.
캐스트를 암시적으로 표시하는 것에 대해 보수적인 것이 현명합니다. 암시적 캐스팅 경로가 너무 많으면 다음이 발생할 수 있습니다.PostgreSQL놀라움을 선택하다 명령을 해석하지 못하거나 명령을 해석할 수 없는 경우 다양한 해석이 가능하기 때문입니다. 에이 경험상 좋은 법칙은 캐스트를 암시적으로만 호출 가능하게 만드는 것입니다. 유형 간 정보 보존 변환을 위해 동일한 일반 유형 카테고리. 예를 들어,int2에int4합리적으로 그럴 수 있습니다 암시적이지만 토토 핫는float8에int4아마도 할당 전용이어야 합니다. 다음과 같은 교차 유형 카테고리 캐스트텍스트에int4은 명시적 전용으로 만드는 것이 가장 좋습니다.
캐스트를 생성하려면 소스 또는 대상 데이터 유형. 바이너리 호환 캐스트를 생성하려면 다음을 수행해야 합니다. 슈퍼유저. (이러한 제한은 잘못된 바이너리 호환 캐스트 변환은 쉽게 충돌할 수 있습니다. 서버.)
캐스트의 소스 데이터 유형 이름.
캐스트의 대상 데이터 유형 이름.
캐스트를 수행하는 데 사용되는 함수입니다. 함수 이름 스키마에 적합할 수 있습니다. 그렇지 않은 경우 해당 기능은 다음과 같습니다. 스키마 검색 경로에서 조회했습니다. 함수의 결과 데이터 유형은 캐스트의 대상 유형과 일치해야 합니다. 그 인수는 아래에서 논의됩니다.
소스 유형과 대상 유형이 다음과 같음을 나타냅니다. 바이너리 호환 가능하므로 수행하는 데 기능이 필요하지 않습니다. 출연진.
캐스트가 암시적으로 호출될 수 있음을 나타냅니다. 할당 컨텍스트.
캐스트가 모든 항목에서 암시적으로 호출될 수 있음을 나타냅니다. 맥락.
Cast 구현 함수는 1~3개의 인수를 가질 수 있습니다. 첫 번째 인수 유형은 토토 핫의 소스와 동일해야 합니다. 유형. 두 번째 인수가 있는 경우 유형이어야 합니다.정수; 연관된 유형 수정자를 수신합니다. 대상 유형으로, 또는-1만일 아무것도 없습니다. 세 번째 인수가 있는 경우 유형이어야 합니다.부울; 그것은 받는다참토토 핫가 명시적 토토 핫인 경우,거짓그렇지 않으면. (이상하게도 SQL 사양에서는 일부에서는 명시적 및 암시적 토토 핫에 대한 서로 다른 동작 사례. 이 인수는 다음을 수행해야 하는 함수에 제공됩니다. 그러한 캐스트를 구현하십시오. 디자인하는 것은 권장하지 않습니다. 이것이 중요하므로 자체 데이터 유형을 사용하세요.)
일반적으로 캐스트는 소스와 대상 데이터가 달라야 합니다 유형. 그러나 동일한 캐스트를 선언하는 것은 허용됩니다. 캐스트 구현 기능이 있는 경우 소스 및 대상 유형 하나 이상의 인수로. 이는 다음을 나타내는 데 사용됩니다. 시스템 카탈로그의 유형별 길이 강제 함수. 명명된 함수는 해당 유형의 값을 강제로 변환하는 데 사용됩니다. 두 번째 인수로 제공되는 유형 수정자 값입니다.
캐스트에 소스와 대상 유형이 다르고 둘 이상의 인수를 취하는 함수는 다음을 나타냅니다. 한 유형에서 다른 유형으로 변환하고 길이를 적용 한 단계의 강제. 그러한 항목을 사용할 수 없는 경우, 유형 수정자를 사용하는 유형으로의 강제 변환에는 두 단계가 포함됩니다. 하나는 데이터 유형 간 변환을 위한 것이고, 다른 하나는 수정자.
사용PostgreSQL : 문서 : 8.3 : 드롭 스포츠 토토 베트맨에 사용자 정의 캐스트를 제거합니다.
두 유형을 모두 변환할 수 있기를 원한다면 기억하세요 두 가지 방법으로 명시적으로 토토 핫를 선언해야 합니다.
일반적으로 사이에 캐스트를 생성할 필요는 없습니다. 사용자 정의 유형 및 표준 문자열 유형(텍스트, varchar및문자(n)). 포스트그레SQL자동으로 다른 유형을 호출하여 문자열 유형으로의 캐스트를 처리합니다. 함수를 출력하거나 반대로 문자열 유형의 캐스트를 처리합니다. 다른 유형의 입력 함수를 호출하여 이것들 자동으로 제공되는 캐스트는 다음과 같습니다.I/O 변환 토토 핫. I/O 변환은 다음으로 캐스트됩니다. 문자열 유형은 할당 캐스트로 처리되지만 I/O는 문자열 유형의 변환 캐스트는 명시적 전용입니다. 당신은 할 수 있습니다 자신의 캐스트를 선언하여 이 동작을 재정의하여 I/O 변환 토토 핫이지만 일반적으로 그렇게 하는 유일한 이유는 다음과 같습니다. 당신은 변환을 보다 쉽게 호출할 수 있기를 원합니다. 표준 할당 전용 또는 명시적 전용 설정입니다. 또 다른 가능한 이유는 변환이 작동하기를 원하기 때문입니다. 유형의 I/O 기능과 다릅니다. 하지만 그건 충분히 놀랍기 때문에 두 번 생각해 보아야 합니다. 좋은 생각이에요. (실제로 내장 유형 중 소수는 전환에 대해 서로 다른 행동을 보이는 이유는 주로 다음과 같습니다. SQL 표준의 요구 사항입니다.)
이전PostgreSQL7.3, 데이터 유형과 이름이 같은 모든 함수가 반환됨 해당 데이터 유형을 사용하고 다른 유형의 인수 하나를 취했습니다. 자동으로 캐스트 기능을 수행합니다. 이 컨벤션은 폐기되었습니다 스키마 도입에 직면하여 다음을 수행할 수 있습니다. 시스템 카탈로그에서 바이너리 호환 캐스트를 나타냅니다. 는 내장 형변환 함수는 여전히 이 이름 지정 체계를 따르지만 시스템 카탈로그에 캐스트로 표시되어야 합니다.pg_cast또한.
필수는 아니지만 계속해서 수행하는 것이 좋습니다. 캐스트 구현을 명명하는 이 오래된 규칙을 따르십시오. 대상 데이터 유형 이후에 작동합니다. 많은 사용자들이 익숙합니다. 함수 스타일 표기법을 사용하여 데이터 유형을 캐스팅할 수 있습니다. 즉유형 이름(x). 이 표기법은 사실 더 이상 아무것도 아닙니다. 캐스트 구현 함수를 호출하는 것 이상입니다. 그것은이다 특별히 캐스트로 취급되지 않습니다. 변환 기능이 다음과 같은 경우 이 협약을 지지하도록 지명되지 않았다면 당신은 놀랄 것입니다 사용자. 이후PostgreSQL허용합니다 다른 인수로 동일한 함수 이름을 오버로드함 유형이므로 다중 변환에 어려움이 없습니다. 모두 대상 유형을 사용하는 다양한 유형의 함수 이름.
참고:실제로 이전 단락은 지나치게 단순화: 두 가지 경우가 있습니다. 함수 호출 구성은 캐스트 요청으로 처리됩니다. 실제 기능과 일치시키지 않고. 만약 함수 호출이름(x)가 기존 항목과 정확히 일치하지 않습니다. 기능하지만이름이것은 데이터 유형의 이름 및pg_cast유형에서 이 유형에 대한 바이너리 호환 토토 핫를 제공합니다. 의x, 그러면 호출은 다음과 같습니다. 바이너리 호환 캐스트로 해석됩니다. 이 예외가 발생합니다. 다음을 사용하여 바이너리 호환 캐스트를 호출할 수 있습니다. 기능적 구문은 기능이 부족하더라도 마찬가지입니다. 마찬가지로 없으면pg_cast항목이지만 캐스트는 문자열 유형으로 또는 문자열 유형에서 이루어집니다. 호출은 I/O 변환 토토 핫로 해석됩니다. 이 예외를 사용하면 I/O 변환 토토 핫를 호출할 수 있습니다. 함수형 구문.
유형에서 토토 핫를 생성하려면bigint에 유형int4함수 사용int4(bigint):
함수 int4(bigint)를 사용하여 토토 핫 생성(bigint AS int4);
(이 토토 핫는 이미 시스템에 사전 정의되어 있습니다.)
그토토 핫 만들기명령은 다음을 준수합니다SQL표준, 제외 SQL은 바이너리 호환 유형 또는 추가 항목을 제공하지 않습니다. 구현 함수에 대한 인수입니다.AS 암시적은PostgreSQL확장자도 마찬가지입니다.