이 문서는 지원되지 않는 버전의 PostgreSQL을위한 것입니다.
당신은에 대해 같은 페이지를 볼 수 있습니다PostgreSQL : 문서 : 17 : 토토 사이트 추천 생성버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

토토 만들기

이름

토토 생성-새 데이터 토토 정의

시놉시스

토토 만들기이름ASAttribute_Name data_type[CollateCollation] [, ...]]))이름열거레이블' [, ...]))이름범위 (하위 토토[, subtype_opclass =subtype_operator_class]Collation]canonical_function]subtype_diff_function]이름(input_function,output_function[, 수신 =수신 _function]send_function]type_modifier_input_function]type_modifier_output_function]Analyze_Function]Internallength| 변수]정렬]스토리지]like_type]카테고리]선호]기본값]요소]Delimiter]Collatable]이름

설명

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

스키마 이름이 주어지면 지정된 스키마에서 유형이 생성됩니다. 그렇지 않으면 현재 스키마에서 생성됩니다.

5 가지 형태의토토 만들기, 위의 구문 시놉시스에 표시된대로. 그들은 각각 A를 만듭니다.복합 토토, anenum type, a범위 토토, a기본 토토또는 a쉘 타입. 이 중 처음 네 개는 아래에서 차례로 논의됩니다.토토 만들기유형 이름을 제외하고 매개 변수가 없습니다. 해당 섹션에서 논의 된 바와 같이 범위 토토 및 기본 토토을 만들 때 쉘 유형이 전방 참조로 필요합니다.

복합 토토

첫 번째 형태토토 만들기복합 토토을 만듭니다. 복합 토토은 속성 이름 및 데이터 유형 목록으로 지정됩니다.토토 만들기원하는 모든 것이 유형을 정의하는 것 일 때 실제 테이블을 만들 필요가 없습니다. 예를 들어 독립형 복합 토토은 기능의 인수 또는 반환 유형으로 유용합니다.

복합 토토을 만들 수 있으려면usage모든 속성 토토의 권한.

열거 된 유형

두 번째 형태토토 만들기에 설명 된대로 열거 된 (Enum) 유형을 만듭니다PostgreSQL : 문서 : 9.6 : 열거 된 범퍼카 토토. 열거 유형은 인용 된 레이블 목록을 가져오고, 각각은보다 작아야합니다.지명 된 ATALEN바이트 길이 (표준의 64 바이트PostgreSQL빌드). (레이블이 0 인 열거 된 유형을 만들 수는 있지만, 적어도 하나의 레이블이 추가되기 전에 값을 유지하기 위해 이러한 유형을 사용할 수 없습니다Alter Type.)

범위 토토

세 번째 형태토토 만들기에 설명 된대로 새 범위 토토을 만듭니다.PostgreSQL : 문서 : 9.6 : 범퍼카 토토 유형.

범위 토토하위 토토관련 B- 트리 연산자 클래스가있는 모든 유형 일 수 있습니다 (범위 토토의 값 순서를 결정하기 위해). 일반적으로 하위 토토의 기본 B- 트리 연산자 클래스는 주문을 결정하는 데 사용됩니다.subtype_opclass. 하위 토토이 Collatable이 있고 범위 주문에서 비 디폴리 콜레이션을 사용하려면 원하는 콜로레이션을 지정하십시오Collation옵션.

선택 사항표준함수는 정의되는 범위 토토의 하나의 인수를 가져 와서 동일한 유형의 값을 반환해야합니다. 이것은 해당되는 경우 범위 값을 표준 형태로 변환하는 데 사용됩니다.섹션 8.17.8자세한 내용은. A 생성표준함수는 범위 토토을 선언하기 전에 정의해야하므로 약간 까다 롭습니다. 이렇게하려면 먼저 이름과 소유자를 제외한 속성이없는 자리 표시 자 유형 인 쉘 유형을 만들어야합니다.토토 만들기이름15555_15804

선택 사항subtype_diff함수의 두 값을 가져와야합니다하위 토토인수로 입력하고 a를 반환합니다.이중 정밀도주어진 두 값의 차이를 나타내는 값. 이것은 선택 사항이지만, 그것을 제공하면 범위 토토의 열에서 GIST 인덱스의 효율성이 훨씬 높아집니다.섹션 8.17.8자세한 내용은

기본 토토

네 번째 형태토토 만들기새 기본 토토 (스칼라 유형)을 만듭니다. 새로운 기본 토토을 만들려면 슈퍼업자 여야합니다.

매개 변수는 위에서 설명한 것뿐만 아니라 어떤 순서로든 나타날 수 있으며 대부분 선택 사항입니다. 둘 이상의 함수를 등록해야합니다 (사용기능 생성) 유형을 정의하기 전에. 지원 기능input_functionandoutput_function반면 기능수신 _function, send_function, type_modifier_input_function, type_modifier_output_functionandAnalyze_Function선택 사항입니다. 일반적으로 이러한 기능은 C 또는 다른 저수준 언어로 코딩되어야합니다.

theinput_function토토의 외부 텍스트 표현을 토토에 대해 정의 된 연산자가 사용하는 내부 표현으로 변환합니다.output_function역 변환을 수행합니다. 입력 함수는 토토의 하나의 인수를 취하는 것으로 선언 할 수 있습니다cstringcstring, OID, 정수. 첫 번째 인수는 C 문자열로 입력 텍스트이고, 두 번째 인수는 유형의 OID입니다 (배열 토토을 제외하고는 요소 유형의 OID를받는 대신 세 번째는입니다.TypMod대상 열의 알려진 경우 (-1이 전달되지 않으면 전달됩니다). 입력 함수는 데이터 토토 자체의 값을 반환해야합니다.cstring. NULL 값에 대해 출력 기능이 호출되지 않습니다.

선택 사항수신 _function토토의 외부 바이너리 표현을 내부 표현으로 변환합니다. 이 함수가 제공되지 않으면 토토은 이진 입력에 참여할 수 없습니다.내부내부, OID, 정수. 첫 번째 인수는 A에 대한 포인터입니다.StringInfo수신 된 바이트 스트링을 고정하는 버퍼; 선택적 인수는 텍스트 입력 함수와 동일합니다.send_function내부 표현에서 외부 바이너리 표현으로 변환합니다. 이 기능이 제공되지 않으면 유형은 이진 출력에 참여할 수 없습니다.BYTEA. 널 값에 대해서는 기능이 호출되지 않습니다.

이 시점에서 입력 및 출력 함수가 새 토토을 생성하기 전에 생성해야 할 때 새 토토의 결과 또는 인수를 어떻게 입력 할 수 있는지 궁금해해야합니다. 대답은 토토이 먼저 A로 정의되어야한다는 것입니다.쉘 타입, 이름과 소유자를 제외한 속성이없는 자리 표시 자 유형입니다. 이것은 명령을 발행하여 수행됩니다토토 만들기이름16829_16938토토 만들기전체 정의를 사용하면 쉘 항목을 완전한 유효한 토토 정의로 대체하고 새 토토을 정상적으로 사용할 수 있습니다.

선택 사항type_modifier_input_functionandtype_modifier_output_function유형이 수정자를 지원하는 경우 필요합니다. 즉,과 같은 유형 선언에 첨부 된 선택적 제약 조건입니다.char (5)또는숫자 (30,2). PostgreSQL사용자 정의 유형이 하나 이상의 간단한 상수 또는 식별자를 수정 자로 가져갈 수 있습니다. 그러나이 정보는 시스템 카탈로그의 저장을 위해 단일 비 음성 정수 값으로 포장 할 수 있어야합니다.type_modifier_input_functiona 형태로 선언 된 수정자를 전달합니다.cstring배열. 유효성을 확인해야합니다 (잘못된 경우 오류를 던지는 경우), 정확한 경우 단일 비 음성을 반환정수열로 저장 될 값"TypMod". 토토에 a가없는 경우 토토 수정자가 거부됩니다.type_modifier_input_function. 그만큼type_modifier_output_function내부 정수 타이프 모드 값을 사용자 표시를 위해 올바른 양식으로 변환합니다. 반환해야합니다cstring값 유형 이름에 추가되는 정확한 문자열입니다. 예를 들어숫자의 함수는 retory(30,2). 생략 할 수 있습니다.type_modifier_output_function

선택 사항Analyze_Function데이터 토토 열에 대한 토토별 통계 수집을 수행합니다. 기본적으로분석토토을 사용하여 통계를 수집하려고합니다"Equals"and​​"덜"운영자, 유형에 대한 기본 B-Tree 연산자 클래스가있는 경우. 비 스칼라 유형의 경우이 동작은 부적합 할 수 있으므로 사용자 정의 분석 기능을 지정하여 재정의 할 수 있습니다.내부, 그리고 a 반환부울결과. 분석 기능에 대한 자세한 API는에 나타납니다.src/include/commands/vacuum.h.

새로운 유형의 내부 표현의 세부 사항은 I/O 함수 및 유형으로 작업하기 위해 만든 기타 기능에만 알려져 있지만 내부 표현의 몇 가지 속성이 있습니다.PostgreSQL. 이것 중 가장 중요한 것은Internallength. 기본 데이터 토토은 고정 길이 일 수 있으며,이 경우Internallength설정으로 표시되는 양의 정수 또는 가변 길이입니다Internallengthtovariable. (내부적으로 이것은 설정으로 표현됩니다Typlen~ -1.) 모든 가변 길이 유형의 내부 표현은이 유형 의이 값의 총 길이를 제공하는 4 바이트 정수로 시작해야합니다. (길이 필드는 종종에 설명 된대로 인코딩됩니다.PostgreSQL : 문서 : 9.6 : 토토 사이트; 직접 액세스하는 것은 현명하지 않습니다.)

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

the정렬매개 변수 데이터 유형에 필요한 스토리지 정렬을 지정합니다. 허용 값은 1, 2, 4 또는 8 바이트 경계에서 정렬과 동일합니다.int4첫 번째 구성 요소로

the스토리지매개 변수는 가변 길이 데이터 유형에 대한 스토리지 전략을 선택할 수 있습니다. (오직일반고정 길이 유형에 허용됩니다.)일반토토의 데이터가 항상 인라인으로 저장되고 압축되지 않도록 지정합니다.확장시스템이 먼저 긴 데이터 값을 압축하려고 시도하고 여전히 너무 길면 메인 테이블 행에서 값을 이동하도록 지정합니다..외부값을 메인 테이블에서 옮길 수 있지만 시스템은 압축을 시도하지 않습니다.Main압축을 허용하지만 메인 테이블에서 값을 옮기는 것을 권장하지 않습니다. (행 스토리지 전략이있는 데이터 항목은 행을 적합하게 만드는 다른 방법이 없다면 메인 테이블에서 여전히 이동할 수 있지만 메인 테이블에 우선적으로 보관됩니다확장and외부품목.)

all스토리지이외의 값일반데이터 토토의 함수가 있었던 값을 처리 할 수 ​​있음을 암시합니다.토스트, 설명대로PostgreSQL : 문서 : 9.6 : 토토 사이트and섹션 36.11.1. 주어진 특정 다른 값은 단지 토스트 가능한 데이터 유형의 열에 대한 기본 토스트 스토리지 전략을 결정합니다.Alter Table Set Storage.

thelike_type매개 변수는 데이터 토토의 기본 표현 속성을 지정하는 대체 방법을 제공합니다. 기존 토토에서 복사하십시오. 의 값Internallength, PassedByvalue, 정렬스토리지명명 된 유형에서 복사됩니다. (일반적으로 바람직하지는 않지만이 값 중 일부를 지정하여를 지정할 수 있습니다.좋아요clause.)이 방법을 지정하면 새로운 유형의 저수준 구현이 특히 유용합니다"piggybacks"어떤 방식으로 기존 토토의 경우.

the카테고리and선호매개 변수를 사용하여 모호한 상황에서 어떤 암시 적 캐스트가 적용되는지 제어 할 수 있습니다. 각 데이터 유형은 단일 ASCII 문자로 명명 된 범주에 속하며 각 유형은입니다."선호"또는 해당 범주 내에 있지 않습니다. 파서는이 규칙이 과부하 된 기능 또는 연산자를 해결하는 데 도움이 될 때 선호하는 유형 (동일한 범주 내의 다른 유형에서만)을 주조하는 것을 선호합니다.PostgreSQL : 문서 : 9.6 : 토토 결과 변환. 다른 유형에 대한 암시 적 캐스트가없는 유형의 경우, 기본값으로 이러한 설정을 떠나는 것으로 충분합니다."가장 일반"범주 내에서 선호되는 유형. 그만큼카테고리매개 변수는 숫자 또는 문자열 유형과 같은 기존 내장 카테고리에 사용자 정의 유형을 추가 할 때 특히 유용합니다. 그러나 완전히 완전히 사용자 정의 된 유형 범주를 만들 수도 있습니다.

사용자가 데이터 유형의 열이 기본값을 널 값 이외의 다른 것으로 원할 경우 기본값을 지정할 수 있습니다. 에 기본값을 지정합니다.기본값키 단어. (이러한 기본값은 명시 적으로 무시할 수 있습니다기본값조항이 특정 열에 첨부되어 있습니다.)

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

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

선택적 부울 매개 변수 인 경우Collatable사실, 토토의 열 정의 및 표현은를 통해 콜레이션 정보를 전달할 수 있습니다Collate절. 실제로 콜라이트 정보를 사용하기 위해 토토에서 작동하는 기능의 구현에 달려 있습니다.

배열 토토

사용자 정의 토토이 생성 될 때마다PostgreSQL관련 배열 토토을 자동으로 생성하며, 이름은 밑줄로 선정 된 요소 유형의 이름으로 구성되며 필요한 경우 자르기 위해 잘라냅니다.지명 된 ATALEN바이트 길이. (생성 된 이름이 기존 유형 이름과 충돌하면 프로세스가 콜링하지 않은 이름이 발견 될 때까지 반복됩니다.)이 암시 적으로 만들어진 배열 토토은 가변 길이이며 내장 입력 및 출력 함수를 사용합니다array_inandArray_out. 배열 토토은 요소 유형의 소유자 또는 스키마의 변경 사항을 추적하며 요소 유형이있는 경우 삭제됩니다..

당신은 왜가 있는지 합리적으로 물을 수도 있습니다.요소옵션, 시스템이 올바른 배열 토토을 자동으로 만드는 경우. 사용하는 것이 유용한 유일한 경우요소는 내부적으로 동일한 여러 가지 항목 배열이되는 고정 길이 유형을 만들 때이며, 유형을 전체적으로 제공하려는 모든 작업 외에도 이러한 것들에 직접 액세스 할 수 있도록합니다. 예를 들어, type포인트포인트 [0]and포인트 [1]. 이 시설은 내부 양식이 정확히 동일한 고정 길이 필드의 시퀀스 인 고정 길이 유형에 대해서만 작동합니다.array_inandArray_out. 역사적 이유로 (즉, 이것은 명백히 잘못되었지만 변경하기에는 너무 늦었습니다), 고정 길이 배열 토토의 위시는 가변 길이 배열과 마찬가지로 0에서 시작합니다..

매개 변수

이름

생성 할 유형의 이름 (선택적으로 스키마 자격).

Attribute_Name

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

data_type

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

Collation

복합 토토의 열 또는 범위 토토과 관련된 기존 콜레이션의 이름

레이블

열거 유형의 하나의 값과 관련된 텍스트 레이블을 나타내는 문자열 문자.

하위 토토

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

subtype_operator_class

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

canonical_function

범위 토토에 대한 표준화 함수의 이름.

subtype_diff_function

하위 토토의 차이 함수의 이름.

input_function

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

output_function

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

수신 _function

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

send_function

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

type_modifier_input_function

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

type_modifier_output_function

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

Analyze_Function

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

Internallength

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

정렬

데이터 유형의 스토리지 정렬 요구 사항. 지정된 경우이어야합니다.char, int2, int4또는더블; 기본값은int4.

스토리지

데이터 유형의 스토리지 전략. 지정된 경우일반, 외부, 확장또는Main; 기본값은일반.

like_type

새 유형이 동일한 표현을 갖는 기존 데이터 유형의 이름. 의 값Internallength, PassedByvalue, 정렬스토리지이 토토의 다른 곳에서 명시 적 사양에 의해 상체되지 않는 한 해당 토토에서 복사됩니다토토 만들기명령.

카테고리

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

선호

True이 유형이 유형 카테고리 내에서 선호되는 유형 인 경우 true false. 기본값은 False입니다.

기본값

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

요소

생성중인 유형은 배열입니다. 이것은 배열 요소의 유형을 지정합니다.

Delimiter

이 토토으로 만든 배열의 값 사이에 사용될 분리기 문자.

Collatable

True이 유형의 운영에서 Collation Information을 사용할 수있는 경우. 기본값은 거짓입니다.

노트

데이터 유형을 생성 한 후에는 제한이 없기 때문에 기본 토토 또는 범위 토토을 생성하는 것은 유형 정의에 언급 된 기능에 대한 공개 실행 권한을 부여하는 것과 관련이 있습니다. 이것은 일반적으로 유형 정의에 유용한 종류의 기능에 문제가되지 않습니다."비밀"외부 양식으로 전환하는 동안 사용할 정보.

PostgreSQL버전 8.3, 생성 된 배열 토토의 이름은 항상 하나의 밑줄 문자가있는 요소 유형의 이름입니다 (_) Prepended. (따라서 유형 이름은 길이가 다른 이름보다 하나의 문자로 길이로 제한되었습니다.)이 경우에도 여전히 그렇습니다.하지만 배열 토토 이름은 최대 길이 이름 또는 밑줄로 시작하는 사용자 유형 이름과의 충돌의 경우 이와 다를 수 있습니다.pg_type.typarray주어진 유형과 관련된 배열 토토을 찾으려면

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

PostgreSQL버전 8.2, 쉘 유형 제작 구문토토 만들기이름존재하지 않았습니다. 새 기본 토토을 만드는 방법은 먼저 입력 함수를 작성하는 것이 었습니다.PostgreSQL먼저 새 데이터 유형의 이름을 입력 함수의 리턴 유형으로 표시합니다. 이 상황에서 쉘 유형은 암시 적으로 생성되며 나머지 I/O 함수의 정의에서 참조 할 수 있습니다.

inPostgreSQL7.3 이전 버전에서는 쉘 유형을 전혀 생성하지 않는 것이 관례였습니다. 함수의 전방 참조를 자리 표시 자 Pseudotype으로 대체하여opaque. 그만큼cstring인수와 결과도로 선언해야했습니다.opaque7.3 이전. 오래된 덤프 파일의로드를 지원하려면토토 만들기사용하여 선언 된 I/O 기능을 수락합니다opaque, 그러나 올바른 토토을 사용하도록 통지를 발행하고 함수 선언을 변경합니다.

예제

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

유형 compfoo 생성 (f1 int, f2 text);

이 예제는 열거 된 유형을 생성하고 테이블 정의에서 사용합니다 :

ENUM ( 'new', 'Open', 'close'로 Bug_status 토토 생성;

이 예제는 범위 토토을 만듭니다 :

range로서 float8_range 유형 생성 (subtype = float8, subtype_diff = float8mi);

이 예제는 기본 데이터 유형을 만듭니다Box그런 다음 테이블 정의에서 유형을 사용합니다.

토토 상자 생성;

의 내부 구조 인 경우Box4의 배열이었다float4요소, 대신 사용할 수 있습니다 :

타입 상자 생성 (

이를 통해 박스 값의 구성 요소 번호를 첨자로 액세스 할 수 있습니다. 그렇지 않으면 유형이 이전과 동일하게 작동합니다.

이 예제는 큰 객체 유형을 생성하고 테이블 정의에서 사용합니다.

타입 bigobj 만들기 (

적절한 입력 및 출력 함수를 포함한 더 많은 예가섹션 36.11.

호환성

첫 번째 형태토토 만들기Commopite 토토을 생성하는 명령은를 준수합니다.SQL표준. 다른 형태는입니다.PostgreSQL확장. 그만큼토토 만들기진술에서SQL표준은 또한 구현되지 않은 다른 양식을 정의합니다PostgreSQL.

속성이 0 인 복합 토토을 생성하는 기능은 A입니다.PostgreSQL-표준과 같은 특이 적 편차 ( 동일한 경우와 유사합니다테이블 생성).