지원되지 않는 버전 :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 확장 : 연산자