지원되지 않는 버전 :6.3
이 문서는 지원되지 않는 버전의 PostgreSQL 용입니다.
당신은에 대해 같은 페이지를 보려고 할 수 있습니다현재버전 또는 위에 나열된 다른 지원되는 버전 중 하나입니다.
PostgreSQL
이전 제 32 장. SQL 확장 : 토토 캔 다음

사용자 토토 캔 유형

기능 사용자 토토 캔 유형에 필요

사용자 정의 유형에는 항상 입력 및 출력 기능이 있어야합니다. 이러한 기능은 유형이 문자열에 어떻게 나타나는지 결정합니다 ( 사용자가 입력하고 사용자에게 출력) 및 유형의 방법 메모리로 구성되었습니다. 입력 함수는 널 지정됩니다 문자열은 입력으로서의 문자열과 내부를 반환합니다 (메모리) 유형의 표현. 출력 기능은 내부를 취합니다 유형의 표현 및 널리시 된 문자를 반환합니다. 끈. 우리가 나타내는 복잡한 유형을 정의하고 싶다고 가정합니다. 복소수. 당연히, 우리는 단지를 대표하기로 선택합니다 다음 C 구조로서의 메모리 :

typedef struct complex 
             더블 X;
             이중 Y;
          복잡한;
그리고 외부 문자열로서 양식 (x, y)의 문자열 (x, y) 대표. 이러한 기능은 일반적으로 쓰기가 어렵지 않습니다. 특히 출력 기능. 그러나 여러 가지가 있습니다 기억해야 할 사항 :
  • 외부 (문자열) 표현을 토토 캔 할 때, 결국 완전하고 강력한 글을 써야한다는 것을 기억하십시오. 입력 기능으로 해당 표현을위한 파서!

    복잡한 *
                    complex_in (char *str)
    
                        더블 X, y;
                        복잡한 *결과;
                        if (sscanf (str, "( %lf, %lf)", & x, & y)! = 2) 
                            elog (warn, "complex_in : 구문 분석 오류
                            널 리턴;
    
                        결과 = (복합 *) palloc (sizeof (complex));
                        결과- x = x;
                        결과- y = y;
                        반환 (결과);
    출력 함수는 단순히 다음과 같습니다.
    char *
                    complex_out (complex *complex)
    
                        char *결과;
                        if (complex == null)
                            반환 (null);
                        결과 = (char *) palloc (60);
                        sprintf (결과, "(%g,%g)", 복합체- x, 복합- y);
                        반환 (결과);
  • 입력 및 출력 함수를 만들어야합니다. 서로의 역전. 그렇지 않다면, 당신은 심각하게 될 것입니다 데이터를 파일에 덤프해야 할 때 문제가 발생한 다음 다시 읽으십시오 (다른 사람의 다른 사람의 데이터베이스에 컴퓨터). 이것은 특히 일반적인 문제입니다 부동 소수점 숫자가 관련되어 있습니다.

복잡한 유형을 토토 캔하려면 두 가지를 만들어야합니다. 작성하기 전에 사용자 토토 캔 함수 complex_in 및 complex_out 유형 :

함수 만들기 complex_in (opaque)
            복잡한 반환
            'pgroot/튜토리얼/obj/complex.so'로
            언어 'c';

         함수 만들기 complex_out (opaque)
            불투명 한 반환
            'pgroot/튜토리얼/obj/complex.so'로
            언어 'c';

         토토 캔 complex 생성 (
            내부 길이 = 16,
            입력 = complex_in,
            출력 = complex_out
         );

앞에서 설명한대로 Postgres는 기본 배열을 완전히 지원합니다 유형. 또한 Postgres는 사용자 토토 캔 유형의 배열을 지원합니다 또한. 유형을 토토 캔하면 Postgres가 자동으로 제공됩니다 해당 유형의 배열 지원. 역사적 이유로 배열 유형은 밑줄이있는 사용자 토토 캔 유형과 동일한 이름을 갖습니다. 캐릭터 _ 전년. 복합 유형에는 기능이 필요하지 않습니다 시스템이 이미 그들이 무엇을 이해하고 있기 때문에 그들에게 토토 캔 내부처럼 보인다.

큰 사물

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

참고 :1024 longwords == 8192 바이트. 사실, 토토 캔 포스트 그레이기 때문에 8192 바이트보다 상당히 작아야합니다. 튜플 및 페이지 오버 헤드 도이 8KB 제한에 맞아야합니다. 적합한 실제 값은 기계에 따라 다릅니다 건축학.

문서 검색 시스템 또는 비트 맵 저장을 위해서는 Postgres 큰 객체 인터페이스를 사용하십시오.
이전 다음
SQL 확장 : 토토 캔 up SQL 확장 : 연산자