64.1. 색인을위한 기본 API 구조

각 토토 캔 액세스 방법은의 행으로 설명됩니다.PG_AM시스템 카탈로그. 그만큼PG_AM항목 이름과 A를 지정합니다핸들러 기능토토 캔 액세스 방법의 경우. 이 항목은를 사용하여 생성 및 삭제할 수 있습니다.PostgreSQLand드롭 액세스 방법SQL 명령.

토토 캔 액세스 메소드 핸들러 함수는 유형의 단일 인수를 수락하도록 선언해야합니다내부그리고 의사 유형을 반환하려면index_am_handler. 인수는 핸들러 기능이 SQL 명령에서 직접 호출되는 것을 방지하는 데 도움이되는 더미 값입니다. 함수의 결과는 palloc'd 유형의 구조 여야합니다indexamroutine9129_9236indexamroutinestruct, Access Method 's라고도합니다api struct, 액세스 방법의 다양한 고정 특성을 지정하는 필드, 예를 들어 멀티 컬럼 토토 캔를 지원할 수 있는지 여부. 더 중요한 것은 액세스 방법에 대한 모든 작업을 수행하는 액세스 방법에 대한 기능을 지원하는 포인터가 포함되어 있다는 것입니다. 이러한 지원 기능은 일반 C 기능이며 SQL 레벨에서는 보이거나 호출 할 수 없습니다. 지원 기능은에 설명되어 있습니다.PostgreSQL : 문서 : 15 : 64.2. 색인 액세스 메이저 토토 사이트 기능.

구조indexamroutine따라서 정의됩니다.

typedef struct indexamroutine

    nodetag 유형;

    /*
     * 우리가 트래버스/검색 할 수있는 총 전략 수 (운영자)
     *이 오전.  AM에 고정 된 전략 할당 세트가없는 경우 0.
     */
    UINT16 AMSTROCTIONS;
    / *이 AM이 사용하는 총 지원 기능 수 */
    UINT16 amsupport;
    / * opclass 옵션 지원 기능 번호 또는 0 */
    UINT16 AMOPTSPROCNUM;
    /* 색인 된 열의 값으로 주문이 지원됩니까? */
    BOOL AMCANORDER;
    /* 인덱스 열에서 연산자의 결과로 주문을 지원합니까? */
    BOOL AMCANORDERBYOP;
    /* 후진 스캔을 지원합니까? */
    Bol Amcanbackward;
    /* 고유 인덱스를 지원합니까? */
    부리 암 카나 니크;
    /* 다중 열 인덱스를 지원합니까? */
    BOOL AMCANMULTICOL;
    /* 첫 번째 인덱스 열에 스캔이 제약을 받으려면 스캔이 필요합니까? */
    bool amoptionalkey;
    /* scalararrayopexpr quals를 처리합니까? */
    BOOL AMSEARCHARRAY;
    /* 손잡이가 null/is null quals가 아닌가? */
    BOOL AMSEARCHNULLS;
    /* 색인 스토리지 데이터 유형이 열 데이터 유형과 다를 수 있습니까? */
    부리 암스토라;
    /*이 유형의 인덱스를 클러스터링 할 수 있습니까? */
    bool amclusterable;
    /* 술어 잠금 장치를 처리합니까? */
    BOOL AMPREDLOCKS;
    /* 병렬 스캔을 지원합니까? */
    BOOL AMCANPARALLEL;
    /* 조항에 포함 된 지원 열에 포함되어 있습니까? */
    bool amcaninclude;
    /* AM MAINGENTENCE_WORK_MEM을 사용합니까? */
    bool amusemainenage workmem;
    / * 또는 평행 진공 플래그 */
    UINT8 AMPARALLELVACUUMOPTIONS;
    / * 인덱스에 저장된 데이터 유형 또는 변수 인 경우 Invalidoid */
    OID AMKEYTEPE;

    / * 인터페이스 함수 */
    Ambuild_function Ambuild;
    Ambuildempty_function Ambuildempty;
    aminsert_function aminsert;
    Ambulkdelete_function Ambulkdelete;
    amvacuumcleanup_function amvacuumcleanup;
    amcanreturn_function amcanreturn;   / *는 널가 될 수 있습니다 */
    amcostestimate_function amcostestestimate;
    amoptions_function amoptions;
    amproperty_function amproperty;     / *는 널가 될 수 있습니다 */
    Ambuildphasename_function Ambuildphasename;   / *는 널가 될 수 있습니다 */
    amvalidate_function amvalidate;
    amadjustmembers_function amadjustmembers; / *는 널가 될 수 있습니다 */
    Ambeginscan_function Ambeginscan;
    Amrescan_function Amrescan;
    amgettuple_function amgettuple;     / *는 널가 될 수 있습니다 */
    AmgetBitMap_function AmgetBitMap;   / *는 널가 될 수 있습니다 */
    emendscan_function amendscan;
    ammarkpos_function ammarkpos;       / *는 널가 될 수 있습니다 */
    amrestros_function amrestrost;     / *는 널가 될 수 있습니다 */

    / * 병렬 인덱스 스캔을 지원하기위한 인터페이스 기능 */
    AmestimateParallelscan_function AmestimateParallelscan;    / *는 널가 될 수 있습니다 */
    aminitparallelscan_function aminitparallelscan;    / *는 널가 될 수 있습니다 */
    amparallelrescan_function amparallelrescan;    / *는 널가 될 수 있습니다 */
 indexAmroutine;

유용하려면 토토 캔 액세스 방법에 하나 이상이 있어야합니다운영자 가족and운영자 클래스정의메이저 토토 사이트 :, 롤 토토 : 문서 :, pg_amopPG_AMPROC. 이 항목을 통해 플래너는이 액세스 방법의 인덱스와 함께 어떤 종류의 쿼리 자격을 사용할 수 있는지 결정할 수 있습니다. 운영자 가족과 수업은에 설명되어 있습니다.PostgreSQL : 문서 : 15 : 38.16. 와이즈 토토에 대한 확장 인터페이스,이 장을 읽기위한 전제 조건 자료입니다.

개별 색인은 a에 의해 정의됩니다.PG_CLASS그것을 물리적 관계로 묘사하는 항목, 그리고 Apg_index인덱스의 논리적 컨텐츠, 즉 관련 연산자 클래스에서 캡처 한대로 인덱스의 논리적 내용, 즉 인덱스 열 세트 및 해당 열의 의미를 보여줍니다. 인덱스 열 (키 값)은 기본 테이블의 간단한 열이거나 테이블 행의 표현 일 수 있습니다. 인덱스 액세스 방법은 일반적으로 인덱스 키 값이 어디에서 나오는 지에 관심이 없지만 (항상 미리 계산 된 키 값이 적용됨)의 운영자 클래스 정보에 매우 관심이 있습니다.pg_index. 이 카탈로그 항목 모두의 일부로 액세스 할 수 있습니다.관계인덱스의 모든 작업에 전달되는 데이터 구조.

일부 깃발 필드indexamroutine끔찍한 의미가 있습니다. 의 요구 사항AmcanuniquePostgresql: Tài liệu: 15: 64.5. 메이저 토토 사이트ỉ mục kiểm tra tính duy nhất. 그만큼Amcanmulticol플래그는 액세스 방법이 멀티 키 컬럼 토토 캔를 지원한다고 주장하는 동안AmoptionalKey첫 번째 토토 캔 열에 대한 토토 캔 가능한 제한 조항이없는 경우 스캔을 허용한다고 주장합니다. 언제Amcanmulticol거짓,amoptionalkey본질적으로 액세스 방법이 제한 조항없이 전체 토토 캔 스캔을 지원하는지 여부를 말합니다. 다중 토토 캔 열을 지원하는 액세스 방법필수첫 번째 열 후 일부 또는 모든 열에서 제한을 생략하는 스캔을 지원합니다. 그러나 첫 번째 토토 캔 열에 약간의 제한이 표시되도록 허용되며, 이는 설정에 따라 신호를받습니다.amoptionalkey거짓. 색인이 설정할 수있는 한 가지 이유amoptionalkey거짓은 null 값을 색인하지 않으면입니다. 대부분의 토토 캔 가능한 연산자는 엄격하므로 NULL 입력에 대해 TRUE를 반환 할 수 없으므로 NULL 값에 대한 토토 캔 항목을 저장하지 않는 것이 매력적입니다. 어쨌든 토토 캔 스캔으로 반환 할 수 없습니다. 그러나 토토 캔 스캔에 주어진 토토 캔 열에 대한 제한 조항이 없을 때이 인수는 실패합니다. 실제로 이것은를 가지고 있음을 의미합니다.amoptionalkeytrue는 널 토토 캔 널을 인덱싱해야합니다. 플래너는 스캔 키가 전혀없는 토토 캔를 사용하기로 결정할 수 있기 때문입니다. 관련 제한은 여러 토토 캔 열을 지원하는 토토 캔 액세스 방법입니다.필수지원 토토 캔 인덱싱 널 값은 첫 번째 열에 열에서 널 값을 늘립니다. 플래너는 토토 캔가 이러한 열을 제한하지 않는 쿼리에 사용될 수 있다고 가정하기 때문입니다. 예를 들어 (a, b)에 대한 색인과 쿼리를 고려하십시오.여기서 a = 4. 시스템은 토토 캔가로 행을 스캔하는 데 사용될 수 있다고 가정합니다.a = 4, 토토 캔가 행을 생략하면B그러나 첫 번째 토토 캔 된 열이 null 인 행을 생략해도 괜찮습니다. 색인 널을 사용하는 토토 캔 액세스 방법도 설정 될 수 있습니다amsearchnullsis nulland검색 조건으로 조항.

theamcaninclude플래그는 액세스 방법이 지원되는지를 나타냅니다.포함열은 키 열을 넘어서 추가 열을 (처리하지 않고) 저장할 수 있습니다. 앞 단락의 요구 사항은 주요 열에만 적용됩니다. 특히의 조합Amcanmulticol=거짓andamcaninclude=true합리적입니다 : 하나의 키 열만있을 수 있지만 열이 포함될 수 있음을 의미합니다. 또한 포함 된 열은 독립적으로 무효가되어야합니다.AmoptionalKey.

정정 제출

문서에 올바른 것이 없다면 일치하지 않습니다. 특정 기능에 대한 귀하의 경험 또는 추가 설명이 필요합니다. 사용이 양식문서 문제를보고하려면