토토 생성이름AS
(속성_이름 데이터_토토[, ... ] )
토토 생성이름(
입력 =input_function,
출력 =출력_기능[ , 수신 =receive_function]
[ , 보내기 =send_function]
[ , 분석 =분석_기능]
[ , 내부 길이 =내부 길이| 변수 ]
[ , 통과값 ]
[ , 정렬 =정렬]
[ , 저장용량 =저장]
[ , 기본값 =기본값]
[ , 요소 =요소]
[ , 구분 기호 =구분자]
)
토토 생성이름
토토 생성새 데이터 유형을 등록합니다 현재 데이터베이스에서 사용하기 위해. 유형을 정의하는 사용자 소유자가 됩니다.
스키마 이름이 주어지면 유형은 지정된 스키마. 그렇지 않으면 현재 스키마에 생성됩니다. 유형 이름은 기존 유형의 이름과 달라야 합니다. 또는 동일한 스키마의 도메인. (테이블이 연관되어 있기 때문에 데이터 유형의 경우 유형 이름은 데이터 유형의 이름과도 구별되어야 합니다. 동일한 스키마에 있는 모든 기존 테이블.)
첫 번째 형식토토 생성복합 토토을 생성합니다. 복합 토토은 속성 이름 및 데이터 유형 목록입니다. 이는 본질적으로 테이블의 행 유형과 동일하지만,토토 생성실제 생성이 필요하지 않습니다. 테이블에서 원하는 것은 유형을 정의하는 것뿐입니다. 에이 독립형 복합 토토은 인수 또는 반환으로 유용합니다. 함수의 종류입니다.
두 번째 형태토토 생성새 기본 토토(스칼라 유형)을 생성합니다. 매개변수는 다음과 같습니다. 위에서 설명한 것뿐만 아니라 대부분의 순서대로 나타납니다. 선택 사항입니다. 두 개 이상의 기능을 등록해야 합니다(를 사용하여)함수 생성)을 정의하기 전에 유형. 지원 기능입력_함수그리고output_function필수이지만 기능receive_function, send_function그리고분석_기능선택사항입니다. 일반적으로 이러한 함수는 C 또는 다른 하위 수준으로 코딩되어야 합니다. 언어.
그input_function개종하다 토토의 외부 텍스트 표현을 내부로 에 대해 정의된 연산자 및 함수에 사용되는 표현 종류.출력_기능역변환을 수행합니다. 입력 기능은 다음과 같습니다. 유형의 인수 하나를 취하는 것으로 선언됨cstring, 또는 세 가지 토토의 인수를 사용하여cstring, oid, 정수. 첫 번째 인수는 입력입니다. 텍스트를 C 문자열로, 두 번째 인수는 해당 유형의 자체 OID입니다. (대신 요소를 받는 배열 토토은 제외) 유형의 OID), 세 번째는typmod알려진 경우 대상 열의 (-1 그렇지 않은 경우 통과됩니다.) 입력 함수는 값을 반환해야 합니다. 데이터 유형 자체의 일반적으로 입력 함수는 다음과 같아야 합니다. 엄격하다고 선언했습니다. 그렇지 않은 경우 NULL로 호출됩니다. NULL 입력 값을 읽을 때 첫 번째 매개변수입니다. 기능 이 경우 오류가 발생하지 않는 한 NULL을 반환해야 합니다. (이 경우는 주로 도메인 입력 기능을 지원하기 위한 것이며, NULL 입력을 거부해야 할 수도 있습니다.) 출력 함수는 다음과 같아야 합니다. 새로운 데이터 유형의 인수 하나를 취하는 것으로 선언됩니다. 그만큼 출력 함수는 유형을 반환해야 합니다.cstring. NULL 값에 대해서는 출력 함수가 호출되지 않습니다.
선택사항receive_function유형을 변환합니다. 외부 이진 표현을 내부 표현으로. 이 함수가 제공되지 않으면 해당 유형이 참여할 수 없습니다. 바이너리 입력에서. 이진 표현을 선택해야 합니다. 합리적으로 내부 형식으로 변환하는 데 비용이 적게 듭니다. 가지고 다닐 수 있는. (예를 들어, 표준 정수 데이터 유형은 다음을 사용합니다. 외부 바이너리 표현으로 네트워크 바이트 순서를 사용하는 반면, 내부 표현은 머신의 기본 바이트에 있습니다. 순서.) 수신 기능은 적절한 검사를 수행해야 합니다 값이 유효한지 확인합니다. 수신 기능은 다음과 같습니다. 유형의 인수 하나를 취하는 것으로 선언됨내부또는 세 가지 토토의 인수를 사용하여내부, oid, 정수. 첫 번째 인수는 포인터입니다. 에문자열정보버퍼 보유 수신된 바이트 문자열; 선택적 인수는 다음과 같습니다. 텍스트 입력 기능을 위해. 수신 함수는 다음을 반환해야 합니다. 데이터 유형 자체의 값입니다. 일반적으로 수신 기능 STRICT로 선언해야 합니다. 그렇지 않은 경우 다음과 같이 호출됩니다. NULL 입력 값을 읽을 때 NULL 첫 번째 매개변수입니다. 그만큼 이 경우에도 함수는 NULL을 반환해야 합니다. 오류. (이 경우는 주로 도메인 수신을 지원하기 위한 것입니다. NULL 입력을 거부해야 할 수도 있는 함수입니다.) 마찬가지로, 선택 사항send_function내부 표현에서 외부 표현으로 변환 이진 표현. 이 기능이 제공되지 않으면 유형은 이진 출력에 참여할 수 없습니다. 보내기 기능 새 데이터 유형의 인수 하나를 사용하여 선언해야 합니다. 보내기 함수는 유형을 반환해야 합니다.바이테아. NULL 값에 대해서는 보내기 함수가 호출되지 않습니다.
이 시점에서 당신은 입력과 출력 함수는 결과나 인수를 갖도록 선언될 수 있습니다. 새로운 유형보다 먼저 생성되어야 하는 경우 유형을 생성할 수 있습니다. 대답은 유형이 먼저 이루어져야 한다는 것입니다. 다음과 같이 정의됩니다.쉘 토토, 이는 이름과 속성을 제외한 속성이 없는 자리 표시자 유형 소유자. 이는 다음 명령을 실행하여 수행됩니다.토토 생성이름, 추가 매개변수 없음. 그런 다음 쉘을 참조하여 I/O 기능을 정의할 수 있습니다. 유형. 마지막으로,토토 생성전체 정의는 쉘 항목을 완전하고 유효한 토토으로 대체합니다. 정의한 후에는 새 토토을 정상적으로 사용할 수 있습니다.
선택사항분석_기능토토별 수행 데이터 토토의 열에 대한 통계 수집입니다. 기본적으로,분석수집을 시도할 것입니다 토토을 사용한 통계"같음"그리고"미만"연산자(있는 경우) 유형에 대한 기본 b-트리 연산자 클래스입니다. 스칼라가 아닌 경우 유형의 이 동작은 부적절할 가능성이 높으므로 사용자 정의 분석 기능을 지정하여 재정의됩니다. 그만큼 분석 함수는 다음의 단일 인수를 취하도록 선언되어야 합니다. 유형내부, 그리고 a를 반환합니다.부울결과입니다. 분석을 위한 상세 API 함수가 다음에 나타납니다.src/include/commands/vacuum.h.
새로운 유형의 내부 표현에 대한 세부사항은 I/O 기능 및 기타 기능에만 알려져 있습니다. 해당 유형과 함께 작동하도록 생성하면 다음과 같은 몇 가지 속성이 있습니다. 선언되어야 하는 내부 표현PostgreSQL. 이들 중 가장 중요한 이다내부 길이. 기본 데이터 토토은 고정 길이일 수 있으며, 이 경우내부 길이은 양의 정수이거나 설정으로 표시되는 가변 길이내부 길이에변수. (내부적으로는 다음과 같이 표현됩니다. 환경타이플렌to -1.) 내부 모든 가변 길이 유형의 표현은 다음으로 시작해야 합니다. 이 값의 전체 길이를 제공하는 4바이트 정수 유형.
선택적 플래그PASSEDBYVALUE은 이 데이터 유형의 값이 값으로 전달됨을 나타냅니다. 참고로보다는. 다음과 같은 값 유형을 전달할 수 없습니다. 내부 표현이의 크기보다 큽니다.데이텀토토(대부분의 시스템에서는 4바이트, 8 몇 바이트).
더정렬매개변수 데이터 유형에 필요한 스토리지 정렬을 지정합니다. 그만큼 허용되는 값은 1, 2, 4 또는 8바이트 정렬과 동일합니다. 경계. 가변 길이 유형에는 반드시 를 포함하므로 최소 4개의 정렬이 필요합니다.int4첫 번째 구성요소로.
그저장매개변수는 다음을 허용합니다. 가변 길이 데이터 유형에 대한 저장 전략 선택. (오직일반허용됩니다 고정 길이 토토.)일반지정 해당 유형의 데이터는 항상 인라인으로 저장되며 압축되었습니다.확장다음을 지정합니다. 시스템은 먼저 긴 데이터 값을 압축하려고 시도하고 여전히 값이 너무 큰 경우 기본 테이블 행 밖으로 값을 이동합니다. 긴.외부값을 다음과 같이 허용합니다. 메인 테이블 밖으로 이동했지만 시스템에서는 이동을 시도하지 않습니다. 압축해 보세요.메인압축을 허용합니다. 하지만 값을 기본 테이블 밖으로 이동하는 것은 권장하지 않습니다. (데이터 이 저장 전략을 사용하는 항목은 여전히 저장소 밖으로 이동할 수 있습니다. 행을 적합하게 만드는 다른 방법이 없는 경우 기본 테이블 우선적으로 메인 테이블에 보관됩니다.확장그리고외부항목.)
사용자가 원하는 경우 기본값을 지정할 수 있습니다. 데이터 유형의 열은 기본적으로 null 값입니다. 를 사용하여 기본값을 지정합니다.기본값키워드. (이러한 기본값은 명시적으로 재정의됨기본값특정 열에 연결된 절.)
유형이 배열임을 나타내려면, 를 사용하는 배열 요소요소키 단어. 예를 들어 4바이트 정수 배열을 정의하려면 (int4), 지정요소 = int4. 배열 토토에 대한 자세한 내용 아래에 나타납니다.
값 사이에 사용되는 구분 기호를 나타냅니다. 이 유형의 배열의 외부 표현구분자특정으로 설정할 수 있습니다. 성격. 기본 구분 기호는 쉼표()입니다.,). 구분 기호는 다음과 연관되어 있습니다. 배열 토토 자체가 아닌 배열 요소 유형입니다.
사용자 정의 기본 데이터 토토이 생성될 때마다PostgreSQL자동으로 이름이 다음으로 구성된 연관된 배열 토토을 생성합니다. 기본 토토의 이름 앞에 밑줄이 추가됩니다. 파서 이 명명 규칙을 이해하고 유형의 열foo[]요청에 토토에 대해_foo. 암시적으로 생성된 배열 토토은 가변 길이이며 내장 입력 및 출력 함수array_in그리고array_out.
왜 그런 일이 발생하는지 합리적으로 물어볼 수 있습니다.요소옵션, 시스템이 올바른 경우 자동으로 배열 토토을 지정합니다. 유용한 유일한 경우 사용요소이것은 당신이 내부적으로 배열인 고정 길이 유형 동일한 수의 항목이 있으며 이러한 항목을 허용하려고 합니다. 구독을 통해 직접 액세스할 수 있습니다. 유형에 대해 제공하려는 작업이 무엇이든 전체. 예를 들어, 다음을 입력하세요.이름허용합니다 성분문자액세스할 요소 이쪽으로. 2D점유형이 허용할 수 있음 다음과 같이 액세스할 수 있는 두 개의 구성 요소 번호점[0]그리고포인트[1]. 이 기능은 다음과 같은 고정 길이 유형에만 작동합니다. 내부 형식은 정확히 동일한 고정 길이의 시퀀스입니다. 전지. 첨자 가능한 가변 길이 유형에는 다음이 있어야 합니다. 다음에서 사용되는 일반화된 내부 표현array_in그리고array_out. 역사적인 이유로(즉, 이는 분명히 잘못된 것이지만 변경하기에는 너무 늦음), 고정 길이 배열의 첨자 토토은 1이 아닌 0부터 시작합니다. 가변 길이 배열.
대상 유형의 이름(선택적으로 스키마 한정) 생성되었습니다.
복합의 속성(열) 이름 유형.
열이 될 기존 데이터 유형의 이름 복합 토토입니다.
데이터를 변환하는 함수의 이름 유형의 외부 텍스트 형식을 내부 형식으로 변환합니다.
데이터를 변환하는 함수의 이름 유형의 내부 형식을 외부 텍스트 형식으로 변환합니다.
데이터를 변환하는 함수의 이름 유형의 외부 바이너리 형식을 내부 형식으로 변환합니다.
데이터를 변환하는 함수의 이름 유형의 내부 형식을 외부 바이너리 형식으로 변환합니다.
통계를 수행하는 함수의 이름 데이터 유형에 대한 분석입니다.
길이를 바이트 단위로 지정하는 숫자 상수 새로운 유형의 내부 표현. 기본값 가변 길이라고 가정합니다.
데이터 유형의 저장 정렬 요구사항입니다. 만약에 지정되어야 합니다.문자, int2, int4, 또는더블; 기본값은int4.
데이터 유형에 대한 저장 전략. 지정한 경우, 이어야 합니다일반, 외부, 확장, 또는메인; 기본값은일반.
데이터 유형의 기본값입니다. 이것을 생략하면, 기본값은 null입니다.
생성되는 유형은 배열입니다. 이는 다음을 지정합니다. 배열 요소의 유형입니다.
값 사이에 사용되는 구분 문자입니다. 이 유형으로 구성된 배열입니다.
사용자 정의 유형 이름은 밑줄로 시작할 수 없습니다 성격 (_) 62세만 가능 긴 문자(또는 일반적으로NAMEDATALEN- 2, 대신NAMEDATALEN- 기타에는 1자 허용 이름). 밑줄로 시작하는 유형 이름은 예약되어 있습니다. 내부적으로 생성된 배열 토토 이름입니다.
데이터 유형을 한 번만 사용하는 데에는 제한이 없기 때문입니다. 생성되었으므로 기본 토토을 생성하는 것은 권한을 부여하는 것과 같습니다. 유형에 언급된 기능에 대한 공개 실행 권한 정의. (따라서 해당 유형의 작성자는 다음을 소유해야 합니다. 이러한 기능.) 이는 일반적으로 다음과 같은 종류의 문제는 아닙니다. 유형 정의에 유용한 함수. 하지만 당신은 그럴 수도 있어요 유형을 디자인하기 전에 두 번 생각하고 싶습니다. 필요하다"비밀"정보가 될 것입니다 외부 형식으로 또는 외부 형식으로 변환하는 동안 사용됩니다.
이전PostgreSQL버전 8.2, 구문토토 생성이름존재하지 않았습니다. 만드는 방법 새로운 기본 토토은 입력 기능을 먼저 생성하는 것이었습니다. 이에 접근하다,PostgreSQL먼저 입력의 반환 유형으로 새 데이터 유형의 이름을 참조하십시오. 기능. 이 상황에서는 쉘 토토이 암시적으로 생성됩니다. 그런 다음 나머지 정의에서 참조할 수 있습니다. I/O 기능. 이 접근 방식은 여전히 작동하지만 더 이상 사용되지 않으며 일부 향후 릴리스에서는 허용되지 않을 수 있습니다. 또한, 이를 방지하기 위해 결과적으로 실수로 쉘 토토으로 카탈로그가 복잡해졌습니다. 함수 정의의 단순한 오타로 인해 쉘 토토은 C로 입력 함수를 작성할 때 이런 식으로 작성됩니다.
에PostgreSQL이전 버전 7.3에서는 쉘 토토을 전혀 생성하지 않는 것이 관례였습니다. 유형 이름에 대한 함수의 전방 참조를 다음으로 대체합니다. 자리 표시자 유사 유형불투명. 그만큼cstring인수와 결과도 다음과 같이 선언됩니다.불투명7.3 이전. 에게 오래된 덤프 파일 로딩을 지원합니다.만들기 토토다음을 사용하여 선언된 I/O 함수를 허용합니다불투명하지만 알림을 발행하고 올바른 토토을 사용하려면 함수 선언을 사용하세요.
이 예는 복합 토토을 생성하고 이를 다음에서 사용합니다. 함수 정의:
CREATE TYPE compfoo AS(f1 int, f2 텍스트);
함수 만들기 getfoo()는 SETOF compfoo를 $$로 반환합니다.
SELECT fooid, fooname FROM foo
$$ 언어 SQL;
이 예는 기본 데이터 토토을 생성합니다.상자그런 다음 테이블 정의의 유형을 사용합니다.
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 : 문서 : 8.2 : 사용자 정의 토토 커뮤니티.