이 문서는 지원되지 않는 PostgreSQL 버전에 대한 것입니다.
당신은 다음과 같은 페이지를 보고 싶을 수도 있습니다.현재버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.
포스트그레SQL
이전 제32장. SQL 확장: 토토 캔 다음

사용자 정의 토토 캔

기능 사용자 정의 토토 캔에 필요함

A user-defined type must always have input and output functions. These functions determine how the type appears in strings (for input by the user and output to the user) and how the type is 기억 속에 정리되어 있다. 입력 함수는 null로 구분된 형식을 사용합니다. character string as its input and returns the internal (in memory) 유형의 표현. 출력 기능은 내부 representation of the type and returns a null delimited character 문자열. Suppose we want to define a complex type which represents 복소수. 당연히 우리는 콤플렉스를 표현하기로 선택합니다. 메모리는 다음 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
         );

앞서 논의한 바와 같이 Postgres는 기본 배열을 완벽하게 지원합니다. 유형. 또한 Postgres는 사용자 정의 유형의 배열을 지원합니다. 뿐만 아니라. 유형을 정의하면 Postgres는 자동으로 다음을 제공합니다. 해당 유형의 배열을 지원합니다. 역사적인 이유로 어레이는 유형은 밑줄이 있는 사용자 정의 유형과 이름이 동일합니다. 문자 _가 앞에 붙습니다. 복합 유형에는 기능이 필요하지 않습니다. 시스템이 이미 그들이 무엇을 이해하고 있는지를 이해하고 있기 때문입니다. 내부 모습이에요.

대형 객체

이 시점에서 논의된 토토 캔은 모두 "작은" 개체입니다 -- 즉, 크기가 8KB보다 작습니다.

참고:긴 단어 1024개 == 8192바이트. 실제로 토토 캔은 Postgres는 8192바이트보다 상당히 작아야 합니다. 튜플과 페이지 오버헤드도 이 8KB 제한에 맞아야 합니다. 맞는 실제 값은 기계에 따라 다릅니다. 아키텍처.

다음과 같은 것에 대해 더 큰 유형이 필요한 경우 문서 검색 시스템이나 비트맵 저장을 위해서는 다음이 필요합니다. Postgres 대형 객체 인터페이스를 사용하세요.
이전 다음
SQL 확장: 토토 캔 위로 SQL 확장: 운영자