62장. 테이블 액세스 무지개 토토 인터페이스 정의

이 장에서는 코어 사이의 인터페이스를 설명합니다.포스트그레SQL시스템 및테이블 액세스 무지개 토토, 테이블의 저장소를 관리합니다. 핵심 시스템은 여기에 지정된 것 외에 이러한 액세스 방법에 대해 거의 알지 못하므로 추가 기능 코드를 작성하여 완전히 새로운 액세스 방법 유형을 개발하는 것이 가능합니다.

각 테이블 액세스 무지개 토토은 다음의 행으로 설명됩니다.pg_am시스템 카탈로그.pg_am항목은 이름을 지정하고핸들러 함수테이블 액세스 무지개 토토입니다. 이러한 항목은 다음을 사용하여 생성 및 삭제할 수 있습니다.액세스 무지개 토토 생성그리고삭제 액세스 무지개 토토SQL 명령.

테이블 액세스 메소드 핸들러 함수는 유형의 단일 인수를 허용하도록 선언되어야 합니다.내부그리고 의사 유형을 반환합니다table_am_handler. 인수는 단순히 SQL 명령에서 핸들러 함수가 직접 호출되는 것을 방지하는 역할을 하는 더미 값입니다.

다음은 확장 SQL 스크립트 파일이 테이블 액세스 무지개 토토 핸들러를 생성하는 방법입니다:

함수 생성 또는 교체 my_tableam_handler(내부)
  RETURNS table_am_handler AS 'my_extension', 'my_tableam_handler'
  언어 C 엄격;

액세스 무지개 토토 생성 myam 유형 테이블 핸들러 my_tableam_handler;

함수의 결과는 유형의 구조체에 대한 포인터여야 합니다TableAmRoutine에는 테이블 액세스 무지개 토토을 사용하기 위해 핵심 코드가 알아야 하는 모든 것이 포함되어 있습니다. 반환 값은 서버 수명이어야 하며 일반적으로 다음과 같이 정의하여 달성됩니다.정적 상수전역 범위의 변수.

테이블 액세스 무지개 토토 핸들러가 있는 소스 파일은 다음과 같습니다:

#include "postgres.h"

#include "access/tableam.h"
#include "fmgr.h"

PG_MODULE_MAGIC;

정적 const TableAmRoutine my_tableam_methods = 
    .type = T_TableAmRoutine,

    /* 예제에서 생략된 TableAmRoutine의 메서드를 여기에 추가합니다. */
;

PG_FUNCTION_INFO_V1(my_tableam_handler);

데이텀
my_tableam_handler(PG_FUNCTION_ARGS)

    PG_RETURN_POINTER(&my_tableam_methods);

TableAmRoutine구조체, 액세스 무지개 토토이라고도 함API 구조체은 콜백을 사용하여 액세스 무지개 토토의 동작을 정의합니다. 이러한 콜백은 일반 C 함수에 대한 포인터이며 SQL 수준에서는 표시되거나 호출할 수 없습니다. 모든 콜백과 해당 동작은TableAmRoutine구조(콜백 요구사항을 정의하는 구조 내부의 주석 포함) 대부분의 콜백에는 테이블 액세스 무지개 토토의 (구현자가 아닌) 사용자의 관점에서 문서화된 래퍼 함수가 있습니다. 자세한 내용은 다음을 참조하세요.src/include/access/tableam.h파일.

액세스 방법을 구현하려면 구현자는 일반적으로 다음을 구현해야 합니다.오전특정 유형의 튜플 테이블 슬롯(참조src/include/executor/tuptable.h), 이는 액세스 무지개 토토 외부의 코드가 AM의 튜플에 대한 참조를 보유하고 튜플의 열에 액세스할 수 있도록 허용합니다.

현재 AM이 실제로 데이터를 저장하는 방식은 상당히 제한이 없습니다. 예를 들어, postgres의 공유 버퍼 캐시를 사용하는 것이 가능하지만 필수는 아닙니다. 사용되는 경우 사용하는 것이 합리적일 수 있습니다.PostgreSQL11941_11983PostgreSQL : 문서 : 18 : 66.6. 데이터베이스 토토 레이아웃.

테이블 액세스 무지개 토토 API의 상당히 큰 제약 중 하나는 현재 AM이 수정 및/또는 색인을 지원하려는 경우 각 튜플에 튜플 식별자가 있어야 한다는 것입니다(TID12334_12396PostgreSQL : 문서 : 18 : 66.6. 데이터베이스 토토 레이아웃). 반드시 하위 부분이 반드시 필요한 것은 아닙니다.TID예를 들어 다음과 같은 의미를 갖습니다., 그러나 비트맵 스캔 지원이 필요한 경우(선택 사항) 블록 번호는 집약성을 제공해야 합니다.

충돌 안전을 위해 AM은 postgres를 사용할 수 있습니다.WAL또는 맞춤 구현. 만일WAL다음 중 하나가 선택됩니다.일반 WAL 레코드사용할 수 있습니다. 또는 aPostgreSQL : 문서구현 가능합니다.

단일 트랜잭션 내에서 다양한 테이블 액세스 무지개 토토에 액세스할 수 있도록 허용하는 방식으로 트랜잭션 지원을 구현하려면 다음의 기계와 긴밀하게 통합해야 할 가능성이 높습니다.src/backend/access/transam/xlog.c.

새로운 개발자테이블 액세스 무지개 토토기존 참조 가능다음에 구현 있음src/backend/access/heap/heapam_handler.c구현에 대한 자세한 내용을 확인하세요.

수정사항 제출

문서에 올바르지 않은 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 경험이 있거나 추가 설명이 필요한 경우 이용해주세요이 양식문서 문제를 보고합니다.