이 문서는 지원되지 않는 버전의 PostgreSQL 용입니다.
당신은에 대해 같은 페이지를 볼 수 있습니다PostgreSQL : 문서 : 17 : 36.13. 사용자 정의 토토 캔버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

14 장 확장SQL: type

앞에서 언급했듯이 두 가지 종류의 무지개 토토이 있습니다.Postgres: 기본 무지개 토토 (정의 프로그래밍 언어) 및 복합 무지개 토토. 이것의 예 인터페이스 지수까지 섹션을 찾을 수 있습니다.complex.sqlcomplex.c. 복합 예제가funcs.sql.

14.1. 사용자 정의 무지개 토토

14.1.1. 사용자 정의 무지개 토토에 필요한 함수

사용자 정의 유형은 항상 입력 및 출력이 있어야합니다 기능. 이러한 기능은 유형이 어떻게 나타나는지 결정합니다 문자열 (사용자의 입력 및 사용자에 대한 출력) 및 유형이 메모리에서 구성되는 방법. 입력 함수가 사용됩니다 입력으로 널 지정된 문자열 문자열 유형의 내부 (메모리) 표현. 그만큼 출력 기능은 유형의 내부 표현을 취합니다 널 구분 된 문자열을 반환합니다. 우리를 가정 해 봅시다 복잡한 복잡한 유형을 정의하고 싶습니다 숫자. 당연히, 우리는 단지를 대표하기로 선택합니다 다음과 같은 메모리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 (오류, "complex_in : parsing %s의 오류", str);
            널 리턴;
    
        결과 = (복합 *) 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자동으로 지원을 제공합니다 해당 유형의 배열의 경우. 역사적 이유로 배열 유형은 사용자 정의 유형과 동일한 이름입니다. 밑줄 문자 _ Prepended. 복합 유형은 필요하지 않습니다 이미 시스템 이후로 정의 된 기능 그들이 내부에서 어떻게 생겼는지 이해합니다.

14.1.2. 큰 물체

데이터 무지개 토토의 값이 수백을 초과하는 경우 크기의 바이트 (내부 형태), 당신은 토스트 가능하게 표시하십시오. 이를 위해 내부 표현 가변 길이 데이터의 표준 레이아웃을 따라야합니다 처음 4 바이트는 총 길이를 포함하는 int32 여야합니다. 데이텀의 바이트 (자체 포함). 그럼, 당신의 모든 무지개 토토의 값을 수락하는 함수는 제공된 값에 대해 PG_DETOAST_DATUM ()을 호출하십시오 함수가 아닌 경우 값이 Null이 아닌지 확인합니다. 엄격한. 마지막으로 적절한 스토리지 옵션을 선택하십시오 생성 무지개 토토 제공 명령 제공.