이전에 언급한 바와 같이 두 가지 종류의 유형이 있습니다.포스트그레: 기본 유형( 프로그래밍 언어) 및 복합 유형(인스턴스). 의 예 인터페이스 색인까지의 이 섹션은 다음에서 찾을 수 있습니다.복합체.sql그리고복합체.c. 복합 예는 다음과 같습니다.funcs.sql.
사용자 정의 유형에는 항상 입력 및 출력 기능이 있어야 합니다. 이 함수는 유형이 문자열에 표시되는 방식을 결정합니다(예: 사용자가 입력하여 사용자에게 출력) 및 유형이 어떻게 되는지 기억 속에 정리되어 있다. 입력 함수는 null로 구분된 형식을 사용합니다. 문자열을 입력으로 사용하고 내부(메모리 내)를 반환합니다. 유형의 표현. 출력 기능은 내부 유형을 표현하고 널 구분 문자를 반환합니다. 문자열. 다음을 나타내는 복합 유형을 정의한다고 가정해 보겠습니다. 복소수. 당연히 우리는 콤플렉스를 표현하기로 선택합니다. 메모리는 다음과 같습니다C구조:
typedef 구조체 복합체
더블엑스;
이중 y;
복잡;및 외부 문자열인 (x,y) 형식의 문자열
표현. 이러한 함수는 일반적으로 작성하기 어렵지 않습니다.
특히 출력 기능. 그러나 다음과 같은 여러 가지가 있습니다.
기억해야 할 점:외부(문자열) 표현을 정의할 때, 결국에는 완전하고 견고한 문서를 작성해야 한다는 점을 기억하세요. 해당 표현에 대한 파서를 입력 함수로 사용하세요!
복잡한 *
complex_in(문자 *str)
이중 x, y;
복잡한 *결과;
if (sscanf(str, " ( %lf , %lf )", &x, &y) != 2)
elog(WARN, "complex_in: 구문 분석 중 오류가 발생했습니다.
NULL을 반환합니다.
결과 = (복소수 *)palloc(sizeof(복소수));
결과-x = x;
결과-y = y;
반환(결과);출력 기능은 간단하게 다음과 같습니다:문자 *
complex_out(복잡한 *복잡한)
문자 *결과;
if (복합 == NULL)
반환(NULL);
결과 = (char *) palloc(60);
sprintf(결과, "(%g,%g)", 복합체-x, 복합체-y);
반환(결과);
당신은 입력과 출력 기능을 만들도록 노력해야 합니다 서로 반대. 그렇지 않으면 심각한 일이 생길 것입니다. 데이터를 파일로 덤프해야 할 때 문제가 발생합니다. 다시 읽어 들인다(예를 들어, 다른 사람의 데이터베이스로). 컴퓨터). 이는 특히 다음과 같은 경우 흔히 발생하는 문제입니다. 부동 소수점 숫자가 포함됩니다.
정의하려면복잡한입력하세요, 우리는 필요합니다 두 개의 사용자 정의 함수 complex_in 및 complex_out을 생성합니다. 토토 핫을 생성하기 전에:
CREATE FUNCTION complex_in(불투명)
반품 콤플렉스
AS 'PGROOT/tutorial/obj/complex.so'
언어 'ㄷ';
CREATE FUNCTION complex_out(불투명)
불투명한 반환
AS 'PGROOT/tutorial/obj/complex.so'
언어 'ㄷ';
CREATE TYPE 콤플렉스(
내부 길이 = 16,
입력 = complex_in,
출력 = complex_out
);
앞서 논의한 바와 같이,포스트그레은 기본 유형의 배열을 완벽하게 지원합니다. 추가적으로,포스트그레스사용자 정의 유형 배열 지원 뿐만 아니라. 유형을 정의할 때,포스트그레자동으로 다음을 지원합니다. 해당 유형의 배열. 역사적인 이유로 배열 유형에는 밑줄 문자 _를 포함한 사용자 정의 유형과 동일한 이름 앞에 붙는다. 복합 유형에는 정의된 함수가 필요하지 않습니다. 시스템이 이미 그 모양을 이해하고 있기 때문입니다. 내부.
이 시점에서 논의된 토토 핫은 모두 "작은" 개체입니다. 즉, 크기가 8KB보다 작습니다.
다음과 같은 것에 대해 더 큰 유형이 필요한 경우 문서 검색 시스템이나 비트맵 저장을 위해서는 다음이 필요합니다. 사용하다포스트그레대형 개체 인터페이스.참고:긴 단어 1024개 == 8192바이트. 실제로 토토 핫은 8192바이트보다 상당히 작아야 합니다.포스트그레튜플 및 페이지 오버헤드 또한 이 8KB 제한에 맞아야 합니다. 실제 값은 적합성은 기계 아키텍처에 따라 다릅니다.