토토 캔 만들기typename(입력 =input_function, output =output_function, Internallength =Internallength| 변수 [, default =기본값] [, 요소 =요소] [, delimiter =Delimiter] [, PassedByvalue] [, 정렬 =정렬] [, Storage =스토리지] )) 토토 캔 만들기typenameas (column_name data_type[, ...])
유형의 이름 (선택적으로 스키마 자격) 생성.
내부 길이를 지정하는 문자 값 새로운 토토 캔의.
기능 만들기, 데이터를 변환합니다 토토 캔의 내부 양식에 대한 외부 양식.
함수의 이름,기능 만들기12201_12289
생성중인 유형은 배열입니다. 이것은 그것을 지정합니다 배열 요소의 유형.
값 사이에 사용될 분리기 문자 이 토토 캔으로 만든 배열.
데이터 유형의 기본값. 일반적으로 이것은입니다 기본값이 널이되도록 생략되었습니다.
데이터 유형의 스토리지 정렬 요구 사항. 만약에 지정되어 있어야합니다char, int2, int4또는더블; 기본값은int4.
데이터 유형의 스토리지 기술. 지정된 경우 해야 됨일반, 외부, 확장또는Main; 기본값은일반.
복합 토토 캔의 열의 이름.
기존 데이터 유형의 이름.
토토 캔 만들기사용자는 허용합니다 에 새 데이터 토토 캔 등록PostgreSQL현재 데이터베이스에 사용하려면. 유형을 정의하는 사용자는 소유자가됩니다.
스키마 이름이 주어지면 유형이 지정된 스키마. 그렇지 않으면 현재 스키마에서 생성됩니다 (검색 경로 앞쪽에있는 것; 참조current_schema ()). 유형 이름은 구별되어야합니다 동일한 스키마의 기존 유형 또는 도메인의 이름에서 (테이블은 관련 데이터 유형이 있으므로 유형 이름도 동일한 스키마에서 테이블 이름과 충돌하지 않습니다.)
첫 번째 형태토토 캔 만들기새 기본 유형 (스칼라 유형)을 만듭니다. 필요합니다 이전에 두 기능을 등록했습니다 (생성 기능 사용) 유형 정의. 새로운 기본 유형의 표현은 다음과 같습니다 결정input_function, 유형의 외부 표현을 An로 변환합니다 연산자 및 기능이 사용할 수있는 내부 표현 유형에 대해 정의되었습니다. 당연히,output_function반대를 수행합니다 변환. 입력 함수는 복용으로 선언 될 수 있습니다 유형의 하나의 주장cstring또는 as 유형의 세 가지 논쟁cstring, OID, int4. (그만큼 첫 번째 인수는 C 문자열로 입력 텍스트, 두 번째 인수는 인수는 이것이 배열 토토 캔 인 경우 요소 유형입니다. 세 번째는typmod의 알려진 경우 대상 열.) 값을 반환해야합니다. 데이터 유형 자체. 출력 함수는 복용으로 선언 될 수 있습니다 새로운 데이터 유형의 한 가지 인수 또는 두 가지 인수를 취하는 것 두 번째는 유형입니다OID. (그만큼 두 번째 인수는 다시 배열의 배열 요소 유형입니다. 유형) 출력 함수는 유형을 반환해야합니다cstring.
이 시점에서 입력과 출력 함수는 결과 또는 입력이 있다고 선언 할 수 있습니다. 새로운 유형, 새로운 유형 앞에서 만들어야 할 때 만들 수 있습니다. 대답은 입력 함수가되어야한다는 것입니다 먼저 생성 된 다음 출력 함수, 데이터 유형을 작성했습니다.PostgreSQL먼저 볼 것입니다 입력의 리턴 유형으로 새 데이터 유형의 이름 기능. 생성됩니다."쉘"토토 캔, 이것은 단순히 자리 표시 자 항목입니다pg_type및 입력 함수 정의를 연결하십시오 쉘 유형에. 마찬가지로 출력 기능이 연결됩니다 (현재 이미 존재하는) 쉘 유형에. 마지막으로,토토 캔 만들기쉘 항목을 a로 대체합니다 완전한 토토 캔 정의 및 새로운 토토 캔을 사용할 수 있습니다.
참고 :inPostgreSQL7.3 이전 버전 대체하여 쉘 유형을 생성하지 않도록 관례 함수의 이름에 대한 전방 참조 자리 표시 자 의사 유형opaque. 그만큼cstring입력 및 결과도 있습니다 로 선언 됨opaque7.3 이전. 오래된 덤프 파일의로드를 지원하려면토토 캔 만들기선언 된 기능을 수락합니다 사용opaque그러나 발행됩니다 사용하도록 함수의 선언을 통지하고 변경하십시오 올바른 토토 캔.
새로운 기본 데이터 유형은 길이가 고정 될 수 있으며,이 경우Internallength는 긍정적입니다
정수 또는 가변 길이는 설정으로 표시Internallengthtovariable
. (내부적으로 이것은 다음으로 표시됩니다
환경Typlen-1.) 내부
모든 가변 길이 토토 캔의 표현은 an으로 시작해야합니다
이 토토 캔 의이 값의 총 길이를 제공하는 정수.
유형이 배열임을 나타내려면
를 사용하는 배열 요소요소
키워드. 예를 들어, 4 바이트 정수 배열을 정의합니다
( "int4"), 지정
요소 = int4
배열 토토 캔에 대한 자세한 내용은 아래에 나타납니다.
이 유형의 배열의 외부 표현,Delimiter특정로 설정할 수 있습니다 성격. 기본 구분 기호는 쉼표입니다 ( ','). 구분자는 관련되어 있습니다 배열 토토 캔 자체가 아닌 배열 요소 유형.
사용자가 원하는 경우 기본값을 지정할 수 있습니다.
데이터 유형의 열을 기본적으로 기본적으로
널. 에 기본값을 지정합니다.기본값
키워드. (그러한 기본값은있을 수 있습니다
명시 적으로 우선기본값
조항이 특정 열에 첨부되어 있습니다.)
19999_20020PassedByvalue
는이 값을 나타냅니다
데이터 토토 캔은 참조가 아닌 값으로 전달됩니다. 메모
내부의 가치 토토 캔을 통과하지 못할 수도 있습니다.
표현은의 너비보다 길다Datum타입 (대부분의 기계에 4 바이트, 8 개
몇 바이트).
the정렬키워드 데이터 유형에 필요한 스토리지 정렬을 지정합니다. 그만큼 허용 값은 1, 2, 4 또는 8 바이트에 정렬되는 것과 동일합니다. 경계. 가변 길이 유형에는 an이 있어야합니다 반드시 an을 포함하기 때문에 4 개 이상의 정렬int4첫 번째 구성 요소로
the스토리지키워드 허용 가변 길이 데이터 유형에 대한 스토리지 전략 선택 (오직일반고정 길이 토토 캔).일반비활성화 데이터 토토 캔에 대한 토스트 : 항상 인라인으로 저장되고 압축되지 않습니다.확장가득 토스트 기능 : 시스템은 먼저 긴 압축을 시도합니다. 데이터 값 및 메인 테이블 행에서 값을 이동합니다. 아직 너무 길다면.외부값을 메인 테이블에서 옮길 수 있지만 시스템은 압축을 시도하지 않습니다.Main압축을 허용하지만 이동을 권장하지 않습니다 메인 테이블의 값. (이 스토리지의 데이터 항목 메인 테이블에서 메인 테이블 밖으로 이동할 수 있습니다. 행을 맞추는 다른 방법이지만 메인에 보관됩니다. 우선적으로 테이블확장and외부품목.)
두 번째 형태토토 캔 만들기복합 토토 캔을 만듭니다. 복합 토토 캔은 a로 지정됩니다 열 이름 및 데이터 유형 목록. 이것은 본질적으로입니다 테이블의 행 유형과 동일하지만 사용토토 캔 만들기실제를 생성 할 필요가 없습니다 원하는 모든 것이 유형을 정의하는 것입니다. 에이 독립형 복합 토토 캔은 a의 반환 유형으로 유용합니다. 기능.
사용자 정의 기본 데이터 유형이 생성 될 때마다PostgreSQL자동으로 관련 배열 토토 캔을 만듭니다. 기본 유형의 이름은 밑줄로 선정되었습니다. 파서 이 이름 지정 규칙을 이해하고 요청을 번역합니다 유형의 열foo []요청으로 토토 캔_foo. 암시 적으로 만들어졌습니다 배열 토토 캔은 가변 길이이며 내장 입력을 사용하고 출력 기능array_inandArray_out.
23121_23148"왜 거기에 있습니다요소
시스템 인 경우 옵션
올바른 배열 토토 캔을 자동으로 만듭니다? "사용하는 것이 유용한 경우요소
고정 길이를 만들 때입니다
내부적으로 N 배열이 동일하게 발생하는 토토 캔
사물, 그리고 당신은 N 물건에 액세스 할 수 있도록하고 싶습니다.
모든 작업 외에도 구독으로 직접
당신은 전체적으로 토토 캔을 제공 할 계획입니다. 예를 들어, type이름그 구성 요소 허용chars에 액세스 할 수 있습니다. 2-D포인트유형은 두 구성 요소가 플로트를 허용 할 수 있습니다
액세스 됨포인트 [0]and포인트 [1]. 이 시설 만 가능합니다
내부 양식이 정확히
N 동일한 고정 길이 필드의 시퀀스. 구독 가능
가변 길이 유형에는 일반화 된 내부가 있어야합니다
에 의해 사용 된 표현array_inandarray_out. 역사적 이유로
(즉, 이것은 분명히 잘못되었지만 변경하기에는 너무 늦었습니다.
IT), 고정 길이 배열 토토 캔의 위시가 0부터 시작됩니다.
가변 길이 배열과 같은 하나보다는 대신.
사용자 정의 유형 이름은 밑줄에서 시작할 수 없습니다 성격 ("_") 길이는 62 자일 수 있습니다 (또는 일반적으로paminatalen-2가 아니라 그만큼paminatalen-1문자 허용 다른 이름). 밑줄로 시작하는 유형 이름이 예약되어 있습니다 내부적으로 만들어진 배열 토토 캔 이름의 경우.
이 예제는를 만듭니다.Box데이터 유형 그런 다음 테이블 정의에서 유형을 사용합니다.
유형 상자 생성 (Internallength = 16, 입력 = my_procedure_1, output = my_procedure_2); 테이블 작성 mybox (id int4, description box);
ifBox의 내부 구조는 4 개의 배열float4s 대신 말하다
유형 상자 생성 (Internallength = 16, 입력 = my_procedure_1, output = my_procedure_2, 요소 = float4);
박스 값의 구성 요소가 구독으로 액세스. 그렇지 않으면 유형이 동일하게 동작합니다 전에.
이 예제는 큰 객체 유형을 생성하고 테이블 정의 :
토토 캔 생성 bigobj (input = lo_filein, output = lo_fileout, 내부 길이 = 변수); 테이블 big_objs (id int4, obj bigobj); 생성
이 예제는 복합 토토 캔을 생성하고 테이블에 사용합니다. 기능 정의 :
유형 compfoo 생성 (f1 int, f2 text); function getfoo () sets sets sets of compfoo 'food, foom from foo'language sql;로 sets sets를 반환합니다.