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

33장. 확장SQL: 토토 핫

이전에 언급한 바와 같이 두 가지 종류의 유형이 있습니다.포스트그레: 기본 유형( 프로그래밍 언어) 및 복합 유형(인스턴스). 의 예 인터페이스 색인까지의 이 섹션은 다음에서 찾을 수 있습니다.복합체.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 제한에 맞아야 합니다. 실제 값은 적합성은 기계 아키텍처에 따라 다릅니다.

다음과 같은 것에 대해 더 큰 유형이 필요한 경우 문서 검색 시스템이나 비트맵 저장을 위해서는 다음이 필요합니다. 사용하다포스트그레대형 개체 인터페이스.