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

만들기 토토 꽁 머니

이름

CREATE CAST -- 새 토토 꽁 머니 정의

시놉시스

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

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

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

설명

토토 꽁 머니 만들기새 토토 꽁 머니를 정의합니다. 토토 꽁 머니 두 데이터 유형 간의 변환을 수행하는 방법을 지정합니다. 에 대한 예

토토 꽁 머니 선택(42 AS float8);

정수 상수 42를 유형으로 변환합니다.float8이전에 지정된 함수를 호출하여 이 경우float8(int4). (적합하지 않은 경우 토토 꽁 머니가 정의되었으므로 변환이 실패합니다.)

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

토토 꽁 머니를 다음과 같이 정의할 수 있습니다.I/O 변환 토토 꽁 머니다음을 사용하여인아웃 포함구문. 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은 명시적 전용으로 만드는 것이 가장 좋습니다.

참고:때때로 유용성 또는 여러 암시적 토토 꽁 머니를 제공하는 표준 준수 이유 유형 집합 사이에서 피할 수 없는 모호성이 발생함 위와 같이. 파서에는 다음을 기반으로 하는 대체 휴리스틱이 있습니다.유형 카테고리그리고선호 유형이러한 경우 원하는 동작을 제공하는 데 도움이 될 수 있습니다. 참조PostgreSQL : 문서 : 9.3 : 토토 사이트 생성더 보기 정보.

토토 꽁 머니를 생성하려면 소스 또는 대상 데이터 유형 및 보유사용특권 다른 유형에. 바이너리 강제형 토토 꽁 머니를 생성하려면 다음을 수행해야 합니다. 슈퍼유저. (이러한 제한은 잘못된 바이너리 강제 변환이 가능하면 서버가 쉽게 중단될 수 있습니다.)

매개변수

source_type

토토 꽁 머니의 소스 데이터 유형 이름.

대상_유형

토토 꽁 머니의 대상 데이터 유형 이름.

함수_이름(인수_유형 [, ...])

토토 꽁 머니를 수행하는 데 사용되는 함수입니다. 함수 이름은 다음과 같습니다. 스키마 자격을 갖춘. 그렇지 않은 경우 함수는 다음에서 조회됩니다. 스키마 검색 경로. 함수의 결과 데이터 유형이 일치해야 합니다. 토토 꽁 머니의 대상 유형입니다. 그 주장은 아래에서 논의됩니다.

기능 없음

소스 유형이 대상에 대해 바이너리 강제 변환이 가능함을 나타냅니다. 유형이므로 토토 꽁 머니를 수행하는 데 함수가 필요하지 않습니다.

인아웃 포함

토토 꽁 머니가 다음에 의해 수행되는 I/O 변환 토토 꽁 머니임을 나타냅니다. 소스 데이터 유형의 출력 함수를 호출하고 전달합니다. 대상 데이터의 입력 함수에 대한 결과 문자열 유형.

할당으로

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

암시적으로

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

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

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

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

토토 꽁 머니에 소스와 대상 유형이 다르고 함수가 있는 경우 둘 이상의 인수를 취하는 경우 하나의 인수 변환을 지원합니다. 한 단계에서 다른 문자를 입력하고 길이 강제를 적용합니다. 해당 항목을 사용할 수 없으면 다음을 사용하는 유형으로 강제 변환됩니다. 유형 수정자에는 두 가지 토토 꽁 머니 단계가 포함됩니다. 하나는 데이터 간 변환입니다. 유형과 수정자를 적용하는 데 1초가 소요됩니다.

도메인 유형에 대한 토토 꽁 머니는 현재 효과가 없습니다. 캐스팅 도메인과의 연결은 기본과 관련된 토토 꽁 머니를 사용합니다. 유형.

참고

사용PostgreSQL : 문서 : 9.3 : 드롭 사설 토토제거하다 사용자 정의 토토 꽁 머니.

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

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

이전PostgreSQL7.3, 매 데이터 유형과 이름이 같은 함수가 해당 데이터를 반환했습니다. 유형을 선택하고 다른 유형의 인수 하나를 취하면 자동으로 캐스팅 기능. 이 협약은 다음과 같은 이유로 폐기되었습니다. 스키마를 도입하고 표현할 수 있다 시스템 카탈로그의 바이너리 강제형 토토 꽁 머니. 내장된 토토 꽁 머니 함수는 여전히 이 명명 체계를 따르지만, 시스템 카탈로그에 토토 꽁 머니로 표시됨pg_cast또한.

필수는 아니지만 계속해서 수행하는 것이 좋습니다. 토토 꽁 머니 구현 함수의 이름을 지정하는 이 오래된 규칙을 따르십시오. 대상 데이터 유형 뒤에. 많은 사용자가 다음 작업에 익숙합니다. 함수 스타일 표기법을 사용하여 데이터 유형을 캐스팅합니다. 즉,유형 이름(x). 이 표기법은 사실상 다음을 호출하는 것 이상도 이하도 아닙니다. 토토 꽁 머니 구현 기능; 특별히 취급되지는 않습니다. 캐스팅. 이를 지원하도록 변환 함수의 이름이 지정되지 않은 경우 컨벤션을 사용하면 사용자를 놀라게 할 것입니다. 이후포스트그레SQL동일한 오버로드를 허용합니다. 인수 유형이 다른 함수 이름, 어려움 없음 다양한 유형의 여러 변환 기능이 있는 경우 모두 대상 유형의 이름을 사용합니다.

참고:실제로 이전 단락은 지나치게 단순화: 함수 호출이 두 가지 경우에 해당됩니다. 구문은 일치하지 않고 토토 꽁 머니 요청으로 처리됩니다. 실제 기능으로 변환합니다. 함수 호출인 경우이름(x) 그렇죠 기존 함수와 정확하게 일치하지는 않지만이름은 데이터 유형의 이름이고pg_cast바이너리 강제 변환 제공 유형에서 이 유형으로 캐스팅됩니다.x이면 호출은 다음과 같이 해석됩니다. 이진 강제형 토토 꽁 머니. 이 예외는 다음과 같이 만들어졌습니다. 바이너리 강제형 토토 꽁 머니는 함수형 구문을 사용하여 호출할 수 있습니다. 아무런 기능도 부족하지만. 마찬가지로 없으면pg_cast항목이지만 토토 꽁 머니는 다음과 같습니다. 문자열 유형의 경우 호출은 I/O 변환 토토 꽁 머니로 해석됩니다. 이 예외를 사용하면 I/O 변환 토토 꽁 머니를 다음을 사용하여 호출할 수 있습니다. 함수형 구문.

참고:예외에도 예외가 있습니다: I/O 복합 유형에서 문자열 유형으로의 변환 토토 꽁 머니는 불가능합니다. 함수 구문을 사용하여 호출되지만 명시적으로 작성되어야 합니다. 토토 꽁 머니 구문(둘 중 하나)토토 꽁 머니또는::표기법). 이 예외는 이후에 추가되었습니다. 자동으로 제공되는 I/O 변환 토토 꽁 머니의 도입으로 실수로 그러한 토토 꽁 머니를 호출하기가 너무 쉽다는 것이 밝혀졌습니다. 함수 또는 열 참조가 의도되었습니다.

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

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

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

호환성

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