이 장은 핵심 사이의 인터페이스를 설명합니다postgresql시스템 및테이블 토토 캔 방법8202_8415
각 테이블 토토 캔 방법은의 행으로 설명됩니다.PG_AM
시스템 카탈로그. 그만큼PG_AM
항목 이름과 A를 지정합니다핸들러 기능테이블 토토 캔 방법의 경우. 이 항목은를 사용하여 생성 및 삭제할 수 있습니다.PostgreSQL :andPostgreSQLSQL 명령.
A table access method handler function must be declared to accept a single argument of type내부
그리고 의사 유형을 반환하려면table_am_handler
. 인수는 핸들러 기능이 SQL 명령에서 직접 호출되는 것을 방지하는 데 도움이되는 더미 값입니다. 함수의 결과는 유형의 구조에 대한 포인터 여야합니다TableAmroutine
9538_9738정적 const
글로벌 범위의 변수. 그만큼TableAmroutine
struct, also called the access method'sapi struct, defines the behavior of the access method using callbacks. These callbacks are pointers to plain C functions and are not visible or callable at the SQL level. All the callbacks and their behavior is defined in theTableAmroutine
구조 (콜백 요구 사항을 정의하는 구조물 내부의 주석 포함). 대부분의 콜백에는 래퍼 함수가 있으며 테이블 토토 캔 방법의 구현자가 아닌 사용자의 관점에서 문서화됩니다. 자세한 내용은를 참조하십시오.src/include/access/tableam.h
file.
To implement an access method, an implementor will typically need to implement an AM-specific type of tuple table slot (seesrc/include/executor/tuptable.h
)는 토토 캔 방법 외부의 코드가 AM의 튜플에 대한 참조를 고정하고 튜플의 열에 토토 캔 할 수 있도록 허용합니다.
Currently, the way an AM actually stores data is fairly unconstrained. For example, it's possible, but not required, to use postgres' shared buffer cache. 사용되는 경우 사용하는 것이 합리적 일 것입니다PostgreSQL의 표준 페이지 레이아웃에 설명 된대로PostgreSQL : 문서 : 12 : 69.6. 데이터베이스 토토 핫 레이아웃.
테이블 토토 캔 방법 API의 상당히 큰 제약 조건 API는 현재 AM이 수정 및/또는 인덱스를 지원하려면 각 튜플이 튜플 식별자 (를 가질 필요가 있다는 것입니다.TID) 블록 번호와 항목 번호로 구성된 (참조PostgreSQL : 문서 : 12 : 69.6. 데이터베이스 토토 핫 레이아웃). It is not strictly necessary that the sub-parts ofTIDs예를 들어와 같은 의미를 갖습니다힙
, 그러나 비트 맵 스캔 지원이 필요한 경우 (선택 사항) 블록 번호는 로컬을 제공해야합니다.
충돌 안전의 경우 AM은 Postgres '를 사용할 수 있습니다.Wal또는 사용자 정의 구현. 만약에Walis chosen, either제네릭 월 레코드또는 새로운 유형의를 사용할 수 있습니다Wal레코드를 구현할 수 있습니다. 일반 WAL 레코드는 쉽지만 WAL 볼륨이 높을 수 있습니다. 새로운 유형의 WAL 레코드를 구현하려면 현재 핵심 코드에 대한 수정이 필요합니다 (특히src/include/access/rmgrlist.h
).
단일 트랜잭션 내에서 다른 테이블 토토 캔 방법에 액세스 할 수있는 방식으로 트랜잭션 지원을 구현하려면 기계와 밀접하게 통합해야 할 것입니다.src/backend/access/transam/xlog.c
.
Any developer of a new테이블 토토 캔 방법
기존을 참조 할 수 있습니다힙
구현에 존재하는src/backend/access/heap/heapam_handler.c
구현에 대한 자세한 내용.