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

토토 생성

이름

CREATE TYPE -- 새 데이터 토토 정의

시놉시스

토토 생성이름AS
    ( [속성_이름 데이터_토토[ 수집조합] [, ... ] ] )

토토 생성이름AS ENUM
    ( [ '라벨' [, ... ] ] )

토토 생성이름AS 범위(
    하위 토토 =하위토토[ , SUBTYPE_OPCLASS =subtype_operator_class]
    [ , 대조 =조합]
    [ , 표준 =canonical_function]
    [ , SUBTYPE_DIFF =subtype_diff_function]
)

토토 생성이름(
    입력 =input_function,
    출력 =output_function[ , 수신 =receive_function]
    [ , 보내기 =send_function]
    [ , TYPMOD_IN =type_modifier_input_function]
    [ , TYPMOD_OUT =type_modifier_output_function]
    [ , 분석 =분석_기능]
    [ , 내부 길이 =내부 길이| 변수  ]
    [ , 통과값 ]
    [ , 정렬 =정렬]
    [ , 저장용량 =저장]
    [ , 좋아요 =like_type]
    [ , 카테고리 =범주]
    [ , 선호 =선호]
    [ , 기본값 =기본값]
    [ , 요소 =요소]
    [ , 구분 기호 =구분자]
    [ , 정렬 가능 =조합 가능]
)

토토 생성이름

설명

토토 생성현재 데이터베이스에서 사용할 새로운 데이터 유형을 등록합니다. 유형을 정의하는 사용자가 소유자가 됩니다.

스키마 이름이 주어지면 해당 유형은 지정된 스키마에 생성됩니다. 그렇지 않으면 현재 스키마에 생성됩니다. 유형 이름은 동일한 스키마에 있는 기존 유형 또는 도메인의 이름과 달라야 합니다. (테이블에는 연관된 데이터 유형이 있으므로 유형 이름은 동일한 스키마에 있는 기존 테이블의 이름과도 구별되어야 합니다.)

다섯 가지 형태가 있습니다.토토 생성, 위의 구문 개요에 표시된 대로입니다. 그들은 각각 다음을 생성합니다.복합 토토, an열거형 토토, 아범위 토토, 아기본 토토또는 a쉘 토토. 이들 중 처음 4개에 대해서는 아래에서 차례로 설명합니다. 쉘 토토은 나중에 정의할 유형에 대한 단순한 자리 표시자입니다. 발행하여 생성됩니다토토 생성유형 이름을 제외한 매개변수가 없습니다. 해당 섹션에서 설명한 대로 범위 토토과 기본 토토을 생성할 때 셸 유형은 전방 참조로 필요합니다.

복합 토토

첫 번째 형태토토 생성복합 토토을 생성합니다. 복합 토토은 속성 이름 및 데이터 유형 목록으로 지정됩니다. 해당 데이터 유형이 조합 가능한 경우 속성의 조합도 지정할 수 있습니다. 복합 토토은 기본적으로 테이블의 행 유형과 동일하지만,토토 생성유형 정의만 원하는 경우 실제 테이블을 생성할 필요가 없습니다. 독립형 복합 토토은 예를 들어 함수의 인수 또는 반환 유형으로 유용합니다.

복합 토토을 생성하려면 다음이 있어야 합니다.사용모든 속성 토토에 대한 권한.

열거 토토

두 번째 형태의토토 생성에 설명된 대로 열거(열거) 유형을 생성합니다.PostgreSQL : 문서 : 9.6 : 열거 된 범퍼카 토토. 열거형 토토은 인용된 라벨 목록을 취하며 각 라벨은 다음보다 작아야 합니다.NAMEDATALEN바이트 길이(표준 64바이트PostgreSQL빌드). (레이블이 없는 열거 토토을 생성할 수 있지만 다음을 사용하여 하나 이상의 레이블이 추가되기 전에는 이러한 유형을 사용하여 값을 보유할 수 없습니다.PostgreSQL : 문서 : 9.6 : 토토 사이트 Type.)

범위 토토

의 세 번째 형태토토 생성에 설명된 대로 새 범위 토토을 생성합니다.PostgreSQL : 문서 : 9.6 : 범퍼카 토토 유형.

범위 토토하위 토토범위 토토의 값 순서를 결정하기 위해 관련 b-트리 연산자 클래스가 있는 모든 유형일 수 있습니다. 일반적으로 하위 토토의 기본 b-트리 연산자 클래스는 순서를 결정하는 데 사용됩니다. 기본이 아닌 연산자 클래스를 사용하려면 해당 이름을 다음과 같이 지정하십시오.subtype_opclass. 하위 토토이 조합 가능하고 범위 순서에서 기본이 아닌 데이터 정렬을 사용하려는 경우, 다음을 사용하여 원하는 데이터 정렬을 지정하십시오.조합옵션.

선택사항표준함수는 정의된 범위 토토의 인수 하나를 가져와서 동일한 유형의 값을 반환해야 합니다. 해당되는 경우 범위 값을 표준 형식으로 변환하는 데 사용됩니다. 참조섹션 8.17.816412_16448표준함수는 범위 토토을 선언하기 전에 정의해야 하기 때문에 약간 까다롭습니다. 이렇게 하려면 먼저 이름과 소유자 외에는 속성이 없는 자리 표시자 유형인 셸 유형을 만들어야 합니다. 이는 다음 명령을 실행하여 수행됩니다.토토 생성이름, 추가 매개변수 없음. 그런 다음 쉘 토토을 인수와 결과로 사용하여 함수를 선언하고, 마지막으로 동일한 이름을 사용하여 범위 토토을 선언할 수 있습니다. 그러면 쉘 토토 항목이 유효한 범위 토토으로 자동으로 대체됩니다.

선택사항subtype_diff함수는 두 개의 값을 취해야 합니다.하위 토토인수로 입력하고 a를 반환합니다.배정밀도주어진 두 값 사이의 차이를 나타내는 값입니다. 이는 선택 사항이지만 이를 제공하면 범위 토토의 열에서 GiST 인덱스의 효율성이 훨씬 높아집니다. 참조섹션 8.17.8더 많은 정보를 원하시면.

기본 토토

의 네 번째 형태토토 생성새 기본 토토(스칼라 유형)을 생성합니다. 새 기본 토토을 생성하려면 수퍼유저여야 합니다. (잘못된 유형 정의로 인해 서버가 혼란을 겪거나 충돌이 발생할 수 있기 때문에 이러한 제한이 적용되었습니다.)

매개변수는 위에 설명된 것뿐만 아니라 어떤 순서로도 나타날 수 있으며 대부분은 선택 사항입니다. 두 개 이상의 기능을 등록해야 합니다(를 사용하여)함수 생성) 유형을 정의하기 전에. 지원 기능입력_함수그리고출력_기능반드시 함수는 필수입니다.receive_function, send_function, type_modifier_input_function, type_modifier_output_function그리고분석_기능선택사항입니다. 일반적으로 이러한 함수는 C 또는 다른 저수준 언어로 코딩되어야 합니다.

input_function유형의 외부 텍스트 표현을 해당 유형에 정의된 연산자 및 함수에서 사용하는 내부 표현으로 변환합니다.출력_기능역변환을 수행합니다. 입력 함수는 다음 유형의 인수 하나를 사용하여 선언할 수 있습니다.cstring또는 세 가지 유형의 인수를 사용하여cstring, oid, 정수. 첫 번째 인수는 C 문자열의 입력 텍스트이고, 두 번째 인수는 유형의 자체 OID이며(대신 요소 유형의 OID를 받는 배열 토토은 제외), 세 번째는typmod19358_19935cstring. NULL 값에 대해서는 출력 함수가 호출되지 않습니다.

선택사항receive_function유형의 외부 바이너리 표현을 내부 표현으로 변환합니다. 이 함수가 제공되지 않으면 해당 유형은 이진 입력에 참여할 수 없습니다. 이진 표현은 내부 형식으로 변환하는 비용이 저렴하고 이식성이 뛰어나도록 선택해야 합니다. (예를 들어, 표준 정수 데이터 유형은 외부 바이너리 표현으로 네트워크 바이트 순서를 사용하는 반면 내부 표현은 머신의 기본 바이트 순서를 사용합니다.) 수신 기능은 값이 유효한지 확인하기 위해 적절한 검사를 수행해야 합니다. 수신 함수는 다음 유형의 인수 하나를 사용하여 선언할 수 있습니다.내부또는 세 가지 유형의 인수를 사용하여내부, oid, 정수. 첫 번째 인수는 a에 대한 포인터입니다.문자열정보수신된 바이트 문자열을 보유하는 버퍼; 선택적 인수는 텍스트 입력 함수와 동일합니다. 수신 함수는 데이터 유형 자체의 값을 반환해야 합니다. 일반적으로 수신 함수는 STRICT로 선언해야 합니다. 그렇지 않은 경우 NULL 입력 값을 읽을 때 NULL 첫 번째 매개변수로 호출됩니다. 이 경우 오류가 발생하지 않는 한 함수는 여전히 NULL을 반환해야 합니다. (이 경우는 주로 NULL 입력을 거부해야 할 수 있는 도메인 수신 기능을 지원하기 위한 것입니다.) 마찬가지로 선택적send_function내부 표현에서 외부 바이너리 표현으로 변환합니다. 이 함수가 제공되지 않으면 해당 유형은 이진 출력에 참여할 수 없습니다. 보내기 함수는 새로운 데이터 유형의 인수 하나를 취하도록 선언되어야 합니다. 보내기 함수는 유형을 반환해야 합니다.바이테아. NULL 값에 대해서는 보내기 함수가 호출되지 않습니다.

이 시점에서 당신은 새로운 유형이 생성되기 전에 생성되어야 할 때 입력 및 출력 함수가 새로운 유형의 결과 또는 인수를 갖도록 어떻게 선언할 수 있는지 궁금해해야 합니다. 대답은 유형이 먼저 다음과 같이 정의되어야 한다는 것입니다.쉘 토토은 이름과 소유자 외에는 속성이 없는 자리 표시자 유형입니다. 이는 다음 명령을 실행하여 수행됩니다.토토 생성이름, 추가 매개변수 없음. 그런 다음 쉘 토토을 참조하여 C I/O 함수를 정의할 수 있습니다. 마지막으로,토토 생성전체 정의를 사용하면 셸 항목을 완전하고 유효한 유형 정의로 대체한 후 새 유형을 정상적으로 사용할 수 있습니다.

선택사항type_modifier_input_function그리고type_modifier_output_function유형이 수정자를 지원하는 경우 필요합니다. 즉, 유형 선언에 첨부된 선택적 제약 조건입니다.문자(5)또는숫자(30,2). PostgreSQL사용자 정의 유형이 하나 이상의 간단한 상수 또는 식별자를 수정자로 사용할 수 있습니다. 그러나 이 정보는 시스템 카탈로그에 저장하기 위해 음수가 아닌 단일 정수 값으로 압축될 수 있어야 합니다.type_modifier_input_functiona 형식으로 선언된 수정자가 전달됩니다.cstring배열. 값의 유효성을 확인해야 하며(잘못된 경우 오류 발생) 값이 정확하면 음수가 아닌 단일 값을 반환합니다.정수컬럼으로 저장될 값"typmod". 토토에 가 없으면 토토 수정자가 거부됩니다.type_modifier_input_function.type_modifier_output_function내부 정수 typmod 값을 사용자 표시를 위한 올바른 형식으로 다시 변환합니다. a를 반환해야 합니다.cstring유형 이름에 추가할 정확한 문자열인 값입니다. 예를 들어숫자의 함수가 반환될 수 있습니다.(30,2). 를 생략할 수 있습니다.type_modifier_output_function, 이 경우 기본 표시 형식은 괄호로 묶인 저장된 typmod 정수 값입니다.

선택사항분석_기능해당 데이터 토토의 열에 대해 토토별 통계 수집을 수행합니다. 기본적으로,분석유형을 사용하여 통계 수집을 시도합니다"같음"그리고"미만"연산자, 해당 유형에 대한 기본 b-트리 연산자 클래스가 있는 경우. 스칼라 유형이 아닌 경우 이 동작은 적합하지 않을 수 있으므로 사용자 정의 분석 함수를 지정하여 재정의할 수 있습니다. 분석 함수는 다음 유형의 단일 인수를 사용하도록 선언되어야 합니다.내부, 그리고 a를 반환합니다.부울결과. 분석 기능에 대한 자세한 API는 다음과 같습니다.src/include/commands/vacuum.h.

새 유형의 내부 표현에 대한 세부사항은 해당 유형과 함께 작동하기 위해 생성한 I/O 함수 및 기타 함수에만 알려져 있지만 다음과 같이 선언되어야 하는 내부 표현의 여러 속성이 있습니다.PostgreSQL. 그 중 가장 중요한 것은내부 길이. 기본 데이터 토토은 고정 길이일 수 있습니다. 이 경우내부 길이은 설정으로 표시되는 양의 정수 또는 가변 길이입니다.내부 길이변수. (내부적으로는 설정으로 표현됩니다.타이플렌to -1.) 모든 가변 길이 유형의 내부 표현은 해당 유형 값의 전체 길이를 제공하는 4바이트 정수로 시작해야 합니다. (길이 필드는 다음에 설명된 대로 인코딩되는 경우가 많습니다.PostgreSQL : 문서 : 9.6 : 토토 사이트; 직접 액세스하는 것은 현명하지 않습니다.)

선택적 플래그PASSEDBYVALUE은 이 데이터 유형의 값이 참조가 아닌 값으로 전달됨을 나타냅니다. 값으로 전달된 유형은 고정 길이여야 하며 내부 표현은의 크기보다 클 수 없습니다.데이텀토토(일부 시스템에서는 4바이트, 다른 시스템에서는 8바이트).

정렬매개변수는 데이터 유형에 필요한 저장소 정렬을 지정합니다. 허용되는 값은 1, 2, 4 또는 8바이트 경계의 정렬과 동일합니다. 가변 길이 유형은 반드시 를 포함하므로 최소한 4의 정렬을 가져야 합니다.int4첫 번째 구성요소로.

저장매개변수를 사용하면 가변 길이 데이터 유형에 대한 저장 전략을 선택할 수 있습니다. (만일반고정 길이 유형에 허용됩니다.)일반해당 유형의 데이터가 항상 인라인으로 저장되고 압축되지 않도록 지정합니다.확장시스템이 먼저 긴 데이터 값을 압축하려고 시도하고 값이 여전히 너무 길면 기본 테이블 행 밖으로 값을 이동하도록 지정합니다.외부값을 기본 테이블 밖으로 이동할 수 있지만 시스템은 값을 압축하려고 시도하지 않습니다.메인압축을 허용하지만 값을 기본 테이블 밖으로 이동하는 것은 권장하지 않습니다. (이 저장 전략을 사용하는 데이터 항목은 행을 맞추는 다른 방법이 없는 경우 기본 테이블 밖으로 이동할 수 있지만 우선적으로 기본 테이블에 유지됩니다.확장그리고외부항목.)

모두저장이외의 값일반데이터 유형의 함수가 다음과 같은 값을 처리할 수 있음을 암시구운, 설명된 대로PostgreSQL : 문서 : 9.6 : 토토 사이트그리고섹션 36.11.1. 제공된 특정 다른 값은 단지 토스트 가능한 데이터 유형의 열에 대한 기본 TOAST 저장 전략을 결정합니다. 사용자는 다음을 사용하여 개별 열에 대해 다른 전략을 선택할 수 있습니다.테이블 세트 저장소 변경.

like_type매개변수는 데이터 유형의 기본 표현 속성을 지정하는 대체 방법을 제공합니다. 기존 유형에서 복사하는 것입니다. 의 값내부 길이, passedbyvalue, 정렬저장이름이 지정된 유형에서 복사됩니다. (일반적으로 바람직하지 않지만 이러한 값 중 일부를 다음과 함께 지정하여 재정의하는 것이 가능합니다.좋아요절.) 이러한 방식으로 표현을 지정하는 것은 새로운 유형의 저수준 구현에 특히 유용합니다."피기백"어떤 방식으로든 기존 토토에 적용됩니다.

범주그리고선호매개변수는 모호한 상황에서 적용될 암시적 형변환을 제어하는 데 도움이 될 수 있습니다. 각 데이터 유형은 단일 ASCII 문자로 명명된 범주에 속하며 각 유형은 다음 중 하나입니다."선호"또는 해당 카테고리에 속하지 않습니다. 이 규칙이 오버로드된 함수나 연산자를 해결하는 데 도움이 되는 경우 파서는 선호하는 유형(단, 동일한 범주 내의 다른 유형에서만)으로 캐스팅하는 것을 선호합니다. 자세한 내용은 참조PostgreSQL : 문서 : 9.6 : 토토 결과 변환. 다른 유형에 대한 암시적 캐스트가 없는 유형의 경우 이러한 설정을 기본값으로 두는 것으로 충분합니다. 그러나 암시적 캐스트가 있는 관련 유형 그룹의 경우 모두 카테고리에 속하는 것으로 표시하고 다음 중 하나 또는 두 개를 선택하는 것이 도움이 되는 경우가 많습니다."가장 일반적인"유형이 카테고리 내에서 선호되는 유형입니다.범주매개변수는 숫자 또는 문자열 유형과 같은 기존 내장 범주에 사용자 정의 유형을 추가할 때 특히 유용합니다. 그러나 새로운 전체 사용자 정의 유형 범주를 생성하는 것도 가능합니다. 이러한 카테고리의 이름을 지정하려면 대문자 이외의 ASCII 문자를 선택하세요.

사용자가 데이터 유형의 열을 null 값이 아닌 다른 값으로 기본값으로 지정하려는 경우 기본값을 지정할 수 있습니다. 를 사용하여 기본값을 지정합니다.기본값키워드. (이러한 기본값은 명시적으로 재정의될 수 있습니다.기본값특정 열에 연결된 절입니다.)

유형이 배열임을 나타내려면, 다음을 사용하여 배열 요소의 유형을 지정하십시오.요소키워드. 예를 들어 4바이트 정수 배열을 정의하려면(int4), 지정요소 = int4. 배열 토토에 대한 자세한 내용은 아래에 나와 있습니다.

이 유형의 배열 외부 표현에서 값 사이에 사용되는 구분 기호를 나타내려면,구분자특정 문자로 설정할 수 있습니다. 기본 구분 기호는 쉼표()입니다.,). 구분 기호는 배열 토토 자체가 아니라 배열 요소 유형과 연결되어 있습니다.

선택적 부울 매개변수인 경우조합 가능이 true이면 해당 유형의 열 정의 및 표현식은 다음을 사용하여 데이터 정렬 정보를 전달할 수 있습니다.콜레이트절. 실제로 데이터 정렬 정보를 활용하는 것은 해당 유형에서 작동하는 함수의 구현에 달려 있습니다. 이는 유형을 조합 가능으로 표시하는 것만으로는 자동으로 발생하지 않습니다.

배열 토토

사용자 정의 유형이 생성될 때마다PostgreSQL자동으로 연관된 배열 토토을 생성합니다. 이 유형의 이름은 요소 유형 이름 앞에 밑줄이 추가되고 필요한 경우 잘려서 다음보다 작게 유지됩니다.NAMEDATALEN바이트 길이입니다. (생성된 이름이 기존 유형 이름과 충돌하는 경우 충돌하지 않는 이름을 찾을 때까지 프로세스가 반복됩니다.) 이 암시적으로 생성된 배열 토토은 가변 길이이며 내장 입력 및 출력 함수를 사용합니다.array_in그리고array_out. 배열 토토은 해당 요소 유형의 소유자 또는 스키마의 변경 사항을 추적하고 요소 유형이 다음과 같은 경우 삭제됩니다.

이유가 왜 있는지 합리적으로 물어볼 수 있습니다.요소옵션, 시스템이 자동으로 올바른 배열 토토을 만드는 경우. 유용하게 사용할 수 있는 유일한 경우요소은 내부적으로 동일한 여러 항목의 배열인 고정 길이 유형을 만들고 해당 유형 전체에 제공하려는 모든 작업 외에도 첨자를 통해 이러한 항목에 직접 액세스할 수 있도록 하려는 경우입니다. 예를 들어 다음을 입력하세요.는 다음을 사용하여 액세스할 수 있는 두 개의 부동 소수점 숫자로 표시됩니다.점[0]그리고점[1]. 이 기능은 내부 형식이 정확히 동일한 고정 길이 필드의 시퀀스인 고정 길이 유형에만 작동합니다. 첨자 가능한 가변 길이 유형에는 다음에서 사용되는 일반화된 내부 표현이 있어야 합니다.array_in그리고array_out. 역사적인 이유로(즉, 이는 분명히 잘못된 것이지만 변경하기에는 너무 늦음) 고정 길이 배열 토토의 첨자는 가변 길이 배열의 경우가 아닌 0부터 시작합니다.

매개변수

이름

생성될 유형의 이름(선택적으로 스키마 한정).

속성_이름

복합 토토의 속성(열) 이름.

데이터_토토

복합 토토의 열이 될 기존 데이터 유형의 이름.

조합

복합 토토의 열 또는 범위 토토과 연관될 기존 데이터 정렬의 이름입니다.

라벨

열거형 토토의 한 값과 연관된 텍스트 레이블을 나타내는 문자열 리터럴.

하위 토토

범위 토토이 범위를 나타내는 요소 유형의 이름.

subtype_operator_class

하위 토토에 대한 b-트리 연산자 클래스의 이름.

canonical_function

범위 토토에 대한 정규화 함수의 이름.

subtype_diff_function

하위 토토에 대한 차이 함수의 이름.

input_function

유형의 외부 텍스트 형식에서 내부 형식으로 데이터를 변환하는 함수의 이름.

출력_기능

유형의 내부 형식에서 외부 텍스트 형식으로 데이터를 변환하는 함수의 이름.

receive_function

유형의 외부 바이너리 형식에서 내부 형식으로 데이터를 변환하는 함수의 이름.

send_function

유형의 내부 형식에서 외부 바이너리 형식으로 데이터를 변환하는 함수의 이름.

type_modifier_input_function

유형에 대한 수정자 배열을 내부 형식으로 변환하는 함수의 이름.

type_modifier_output_function

유형 수정자의 내부 형식을 외부 텍스트 형식으로 변환하는 함수의 이름.

분석_기능

데이터 유형에 대한 통계 분석을 수행하는 함수의 이름입니다.

내부 길이

새 유형의 내부 표현의 길이를 바이트 단위로 지정하는 숫자 상수. 기본 가정은 가변 길이라는 것입니다.

정렬

데이터 유형의 저장 정렬 요구사항입니다. 지정된 경우 다음과 같아야 합니다.문자, int2, int4, 또는더블; 기본값은int4.

저장

데이터 유형에 대한 저장 전략. 지정된 경우 다음과 같아야 합니다.일반, 외부, 확장또는메인; 기본값은일반.

like_type

새 유형이 동일한 표현을 갖게 될 기존 데이터 유형의 이름. 의 값내부 길이, passedbyvalue, 정렬저장이 문서의 다른 곳에서 명시적인 사양으로 재정의되지 않는 한 해당 유형에서 복사됩니다.토토 작성명령.

범주

이 유형에 대한 범주 코드(단일 ASCII 문자). 기본값은'유'for"사용자 정의 유형". 다른 표준 카테고리 코드는 다음에서 찾을 수 있습니다.표 50-56. 사용자 정의 카테고리를 생성하기 위해 다른 ASCII 문자를 선택할 수도 있습니다.

선호

이 유형이 해당 유형 범주 내에서 선호되는 유형이면 참이고, 그렇지 않으면 거짓입니다. 기본값은 거짓입니다. 기존 유형 카테고리 내에서 새로운 기본 토토을 생성할 때는 매우 주의하세요. 이로 인해 동작이 크게 변경될 수 있습니다.

기본값

데이터 유형의 기본값입니다. 생략하면 기본값은 null입니다.

요소

생성되는 유형은 배열입니다. 이는 배열 요소의 유형을 지정합니다.

구분자

이 유형으로 구성된 배열의 값 사이에 사용되는 구분 문자입니다.

조합 가능

이 유형의 작업이 대조 정보를 사용할 수 있으면 참입니다. 기본값은 거짓입니다.

참고

데이터 유형이 생성되면 사용에 대한 제한이 없기 때문에 기본 토토이나 범위 토토을 생성하는 것은 유형 정의에 언급된 함수에 대한 공개 실행 권한을 부여하는 것과 같습니다. 이는 일반적으로 유형 정의에 유용한 함수 종류에 대해서는 문제가 되지 않습니다. 하지만 다음과 같은 방식으로 유형을 디자인하기 전에 두 번 생각해보고 싶을 수도 있습니다."비밀"외부 형식으로 또는 외부 형식에서 변환하는 동안 사용할 정보입니다.

이전PostgreSQL버전 8.3, 생성된 배열 토토의 이름은 항상 하나의 밑줄 문자()가 포함된 요소 유형의 이름과 정확히 일치했습니다._)이 앞에 붙습니다. (따라서 유형 이름의 길이는 다른 이름보다 1자 더 적게 제한되었습니다.) 이것이 여전히 일반적이지만 최대 길이 이름의 경우 또는 밑줄로 시작하는 사용자 유형 이름과 충돌하는 경우 배열 토토 이름이 이와 다를 수 있습니다. 따라서 이 규칙에 의존하는 코드 작성은 더 이상 사용되지 않습니다. 대신에 다음을 사용하세요.pg_type.typarray주어진 유형과 관련된 배열 토토을 찾습니다.

밑줄로 시작하는 유형 및 테이블 이름을 사용하지 않는 것이 좋습니다. 서버는 사용자가 지정한 이름과의 충돌을 피하기 위해 생성된 배열 토토 이름을 변경하지만 여전히 혼동의 위험이 있습니다. 특히 밑줄로 시작하는 유형 이름이 항상 배열을 나타낸다고 가정할 수 있는 이전 클라이언트 소프트웨어의 경우 더욱 그렇습니다.

이전포스트그레SQL버전 8.2, 쉘 토토 생성 구문토토 작성이름존재하지 않았습니다. 새로운 기본 토토을 생성하는 방법은 입력 기능을 먼저 생성하는 것이었습니다. 이 접근 방식에서는,포스트그레SQL먼저 입력 함수의 반환 유형으로 새 데이터 유형의 이름이 표시됩니다. 쉘 토토은 이 상황에서 암시적으로 생성되며, 나머지 I/O 기능의 정의에서 참조될 수 있습니다. 이 접근 방식은 여전히 ​​작동하지만 더 이상 사용되지 않으며 일부 향후 릴리스에서는 허용되지 않을 수 있습니다. 또한 함수 정의의 단순한 오타로 인해 실수로 쉘 토토으로 카탈로그가 복잡해지는 것을 방지하기 위해 쉘 토토은 입력 함수가 C로 작성된 경우에만 이 방식으로 만들어집니다.

포스트그레SQL7.3 이전 버전에서는 유형 이름에 대한 함수의 전방 참조를 자리 표시자 의사 유형으로 대체하여 쉘 토토을 생성하지 않는 것이 일반적이었습니다.불투명.cstring인수와 결과도 다음과 같이 선언되어야 했습니다.불투명7.3 이전. 이전 덤프 파일 로드를 지원하려면,토토 생성다음을 사용하여 선언된 I/O 함수를 허용합니다불투명, 그러나 알림을 발행하고 올바른 유형을 사용하도록 함수 선언을 변경합니다.

이 예는 복합 토토을 생성하고 이를 함수 정의에 사용합니다:

CREATE TYPE compfoo AS (f1 int, f2 text);

함수 만들기 getfoo()는 SETOF compfoo를 $$로 반환합니다.
    SELECT fooid, fooname FROM foo
$$ 언어 SQL;

이 예는 열거 토토을 생성하고 이를 테이블 정의에 사용합니다.

CREATE TYPE bug_status AS ENUM ('신규', '열림', '닫힘');

CREATE TABLE 버그(
    ID 일련 번호,
    설명 텍스트,
    상태 버그_상태
);

이 예는 범위 토토을 생성합니다:

CREATE TYPE float8_range AS RANGE(하위 토토 = float8, subtype_diff = float8mi);

이 예는 기본 데이터 토토을 생성합니다.상자그런 다음 테이블 정의에 있는 유형을 사용합니다.

CREATE TYPE 상자;

CREATE FUNCTION my_box_in_function(cstring) 상자를 AS로 반환합니다 ... ;
함수 생성 my_box_out_function(box) cstring AS를 반환합니다 ... ;

토토 생성 상자(
    내부 길이 = 16,
    입력 = my_box_in_function,
    출력 = my_box_out_function
);

테이블 생성 myboxes(
    ID 정수,
    설명 상자
);

내부 구조가상자4개의 배열이었습니다float4요소, 대신 다음을 사용할 수 있습니다.

CREATE TYPE 상자(
    내부 길이 = 16,
    입력 = my_box_in_function,
    출력 = my_box_out_function,
    요소 = float4
);

아래 첨자를 사용하여 상자 값의 구성 요소 번호에 액세스할 수 있습니다. 그렇지 않으면 유형이 이전과 동일하게 동작합니다.

이 예는 대형 객체 유형을 생성하고 이를 테이블 정의에 사용합니다:

유형 bigobj 생성(
    입력 = lo_filein, 출력 = lo_fileout,
    내부 길이 = 가변적
);
테이블 생성 big_objs(
    ID 정수,
    obj 빅OBJ
);

적절한 입력 및 출력 기능을 포함한 더 많은 예제가 있습니다.PostgreSQL : 문서 : 9.6 : 사용자 정의 토토 커뮤니티.

호환성

첫 번째 형태의토토 생성44544_44604SQL표준. 다른 형태는 다음과 같습니다.포스트그레SQL확장.토토 생성문의SQL표준은 또한 구현되지 않은 다른 형식도 정의합니다.PostgreSQL.

속성이 0인 복합 토토을 생성하는 기능은 다음과 같습니다.포스트그레SQL-표준과의 특정 편차(동일한 경우와 유사테이블 생성).