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보다 작습니다.
문서 검색 시스템 또는 비트 맵 저장을 위해서는 Postgres 큰 객체 인터페이스를 사용하십시오.참고 :1024 longwords == 8192 바이트. 사실, 토토 캔 포스트 그레이기 때문에 8192 바이트보다 상당히 작아야합니다. 튜플 및 페이지 오버 헤드 도이 8KB 제한에 맞아야합니다. 적합한 실제 값은 기계에 따라 다릅니다 건축학.
이전 | 홈 | 다음 |
SQL 확장 : 토토 캔 | up | SQL 확장 : 연산자 |