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