이 문서는 지원되지 않는 버전의 PostgreSQL을위한 것입니다.
당신은에 대한 같은 페이지를 보려고 할 수 있습니다PostgreSQL : 문서 : 17 : 62.2. 색인 액세스 토토 결과 기능버전 또는 위에 나열된 다른 지원되는 버전 중 하나입니다.

61.2. 색인 액세스 토토 사이트 순위 기능

인덱스 액세스 토토 사이트 순위이 제공 해야하는 인덱스 구성 및 유지 관리 기능indexamroutineare :

indexbuildresult *
Ambuild (관계 쌓기,
         관계 색인 상관,
         indexInfo *indexInfo);

새 인덱스 구축. 인덱스 관계는 물리적으로 생성되었지만 비어 있습니다. 액세스 토토 사이트 순위에 필요한 고정 된 데이터와 테이블에 이미 존재하는 모든 튜플의 항목으로 채워야합니다. 일반적으로Ambuild함수는 호출합니다indexBuildHeapScan ()11034_11222

무효
Ambuildempty (관계 색인 상관);

빈 색인을 구축하고 초기화 포크 (에 쓰십시오.init_forknum11415_11608

bool
Aminsert (관계 색인 상관,
          데이텀 *값,
          bool *isnull,
          ItemPointer heap_tid,
          관계 중심,
          indexUniqueCheck Checkunique,
          indexInfo *indexInfo);

새 튜플을 기존 인덱스에 삽입하십시오. 그만큼andisnull배열은 인덱싱 할 키 값을 제공하고heap_tid인덱스가 지정 될 TID입니다. 액세스 방법이 고유 인덱스를 지원하는 경우 (ITSAmcanunique플래그는 사실입니다) 그런 다음Checkunique수행 할 독창성 검사 유형을 나타냅니다. 이것은 고유 한 제약이 연기 가능 여부에 따라 다릅니다. 보다PostgreSQL : 문서 : 11 : 61.5. 스포츠 토토 고유성 점검자세한 내용. 일반적으로 액세스 토토 사이트 순위은 만 있으면됩니다.Heaprelation고유성 검사를 수행 할 때 매개 변수 (그 이후로 튜플 라이벌을 확인하기 위해 힙을 조사해야합니다)..

함수의 부울 결과 값은에만 중요합니다.Checkuniqueis고유 _check_partial. 이 경우 실제 결과는 새로운 항목이 고유 한 반면, 허위는 비 유적 일 수 있음을 의미합니다 (그리고 지연된 독창성 점검이 예정되어 있어야 함). 다른 경우 지속적인 잘못된 결과가 권장됩니다.

일부 인덱스는 모든 튜플을 색인화하지 않을 수 있습니다. 튜플을 색인화하지 않으면Aminsert아무것도하지 않고 돌아와야합니다.

인덱스가 SQL 문의 연속 인덱스 삽입에서 데이터를 캐시하려면 공간을 할당 할 수 있습니다.indexInfo- ii_context그리고 데이터에 대한 포인터를 저장indexInfo- ii_amcache(초기에 널이 될 것입니다).

indexBulkDeleteresult *
Ambulkdelete (indexvacuuminfo *info,
              IndexBulkDeleterEsult *통계,
              indexBulkDeleteCallback 콜백,
              void *callback_state);

인덱스에서 튜플을 삭제합니다. 이것은입니다.벌크 삭제전체 인덱스를 스캔하고 각 항목을 확인하여 삭제 해야하는지 확인하여 구현하려는 작업. 통과콜백함수는 스타일로 호출해야합니다콜백 (tid, callback_state) 반환 bool, 참조 된 TID로 식별 된 특정 인덱스 입력이 삭제 될지 여부를 결정합니다. 삭제 작업의 영향에 대한 통계를 포함하는 NULL 또는 PALLOC'D 구조물을 반환해야합니다. 정보를 전달할 필요가 없으면 NULL을 반환해도 괜찮습니다amvacuumcleanup.

제한 때문에maintenance_work_mem, Ambulkdelete많은 튜플을 삭제할 때 두 번 이상 호출해야 할 수도 있습니다. 그만큼통계인수는이 지수에 대한 이전 호출의 결과입니다 (a 내 첫 번째 호출의 경우 null입니다.진공작동). 이를 통해 AM은 전체 작업에 걸쳐 통계를 축적 할 수 있습니다. 일반적으로,Ambulkdelete통과 된 경우 동일한 구조물을 수정하고 반환합니다통계is null이 아닙니다.

IndexBulkDeleteresult *
amvacuumcleanup (indexvacuuminfo *info,
                 indexbulkdeleteresult *stats);

A 후 청소진공작동 (0 이상Ambulkdelete전화). 이것은 인덱스 통계를 반환하는 것 외에는 아무것도 할 필요는 없지만 빈 색인 페이지를 되 찾는 것과 같은 대량 정리를 수행 할 수 있습니다.통계마지막Ambulkdelete통화 반환 또는 null ifAmbulkdelete튜플을 삭제할 필요가 없기 때문에 호출되지 않았습니다. 결과가 null이 아닌 경우 palloc'd 구조물이어야합니다. 포함 된 통계는 업데이트에 사용됩니다PG_CLASS, 그리고에 의해보고 될 것입니다진공ifVerbose가 제공됩니다. 인덱스가 전혀 변경되지 않으면 NULL을 반환해도 괜찮습니다진공작동이지만 그렇지 않으면 올바른 통계를 반환해야합니다.

PostgreSQL 8.4, amvacuumcleanup또한 완료시 호출됩니다분석작동. 이 경우통계항상 null이며 모든 반환 값은 무시됩니다. 이 사례는 점검을 통해 구별 할 수 있습니다Info- Analyze_only. 액세스 토토 사이트 순위은 그러한 통화에서 삽입 후 청소를 제외하고는 아무것도하지 않는 것이 좋습니다.

bool
amcanreturn (관계 인덱스 릴레이션, int attno);

색인이 지원할 수 있는지 확인인덱스 전용 스캔주어진 열에서 열의 원래 색인 값을 반환하여. 속성 번호는 1 기반입니다. 즉, 첫 번째 열 Attno는 1입니다. 이 함수는 포함 된 열에 포함 된 열에는 항상 진정을 반환해야합니다 (지원되는 경우). 액세스 방법이 인덱스 전용 스캔을 전혀 지원하지 않으면Amcanreturn필드IndexAmroutinestruct는 null로 설정할 수 있습니다.

무효
amcostestestimate (plannerinfo *root,
                IndexPath *Path,
                더블 루프 _count,
                Cost *IndexStartUpCost,
                비용 *IndextOtalCost,
                선택성 *indexSelectivity,
                이중 *색인 상관,
                Double *indexpages);

지수 스캔 비용을 추정합니다. 이 기능은 완전히 설명됩니다PostgreSQL : 문서 : 11 : 61.6. 색인 토토 핫 추정 기능, 아래.

BYTEA *
Amoptions (ArrayType *재로포,
           bool validate);

인덱스에 대한 재리포 배열을 구문 분석하고 검증하십시오. 이를 인덱스에 대해 널리화되지 않은 다시 배열이 존재할 때만 가능합니다.다시is텍스트양식의 항목을 포함하는 배열이름=value. 함수는 a를 구성해야합니다.BYTEA값은rd_options인덱스 Relcache 항목 필드. 의 데이터 내용BYTEA값은 접근 방법을 정의 할 수 있습니다. 표준 액세스 방법의 대부분은 구조물을 사용합니다stdrdoptions. 언제validate사실, 함수는 옵션이 인식되지 않거나 잘못된 값이있는 경우 적절한 오류 메시지를보고해야합니다. 언제validate거짓입니다. 잘못된 항목은 조용히 무시되어야합니다. (validate이미 저장된 옵션을로드 할 때PG_CATALOG; 액세스 토토 사이트 순위이 옵션에 대한 규칙을 변경 한 경우에만 잘못 입력 할 수 있으며,이 경우 쓸모없는 항목을 무시하는 경우 적절합니다.) 기본값 동작이 원하는 경우 NULL을 반환해도 괜찮습니다..

bool
amproperty (OID Index_oid, int attno,
            indexAmproperty prop, const char *propname,
            bool *res, bool *isnull);

theamproperty메소드는 색인 액세스 토토 사이트 순위이의 기본 동작을 무시할 수 있도록 허용합니다.pg_index_column_has_property및 관련 기능. 액세스 토토 사이트 순위에 인덱스 속성 문의에 대한 특별한 행동이없는 경우amproperty필드indexamroutinestruct는 null로 설정할 수 있습니다. 그렇지 않으면amproperty메소드가 호출됩니다index_oidandattnoZero forPG_INDEXAM_HAS_PROPERTY전화 또는index_oid유효 및attnoZero forpg_index_has_property전화 또는index_oid유효 및attno0보다 큰pg_index_column_has_property전화.prop테스트중인 속성을 식별하는 열거 값이며propname원래 속성 이름 문자열입니다. 핵심 코드가 속성 이름을 인식하지 못하면propisamprop_unknown. 액세스 방법은 확인하여 사용자 정의 속성 이름을 정의 할 수 있습니다propname경기의 경우 (사용PG_STRCASECMP핵심 코드와 일치하기 위해 일치합니다); 핵심 코드에 알려진 이름의 경우 검사하는 것이 좋습니다prop. 인 경우amproperty메소드 리턴true그런 다음 속성 테스트 결과를 결정했습니다. 설정해야합니다*res반환 또는 설정하기 위해 부울 가치로*ISNULLtotrue널을 반환하려면. (참조 된 변수 모두 초기화거짓통화 전.) 인 경우amproperty메소드 리턴거짓핵심 코드는 속성 테스트 결과를 결정하기위한 일반 논리를 진행합니다.

주문 운영자를 지원하는 액세스 방법을 구현해야합니다amprop_distance_orderable핵심 코드가이를 수행하는 토토 사이트 순위을 모르고 NULL을 반환 할 수 있으므로 속성 테스트. 구현이 유리할 수도 있습니다amprop_returnable테스트, 색인을 열고 호출하는 것보다 더 저렴하게 수행 할 수있는 경우Amcanreturn, 핵심 코드의 기본 동작입니다. 기본 동작은 다른 모든 표준 속성에 대해 만족해야합니다.

bool
amvalidate (Oid opclassoid);

액세스 방법이 합리적으로 수행 할 수있는 한 지정된 운영자 클래스의 카탈로그 항목을 확인하십시오. 예를 들어, 여기에는 필요한 모든 지원 기능이 제공되는 테스트가 포함될 수 있습니다. 그만큼amvalidateOPCLASS가 유효하지 않은 경우 함수가 False를 반환해야합니다. 에 문제 가보고되어야합니다.EREPORT메시지.

물론 인덱스의 목적은 색인과 일치하는 튜플 스캔을 지원하는 것입니다여기서조건, 종종 a예선또는스캔 키. 인덱스 스캐닝의 의미론은 더 자세히 설명합니다PostgreSQL : 문서 : 11 : 61.3. 인덱스 스포츠 토토 결과, 아래. 인덱스 액세스 방법이 지원할 수 있습니다일반색인 스캔,비트 맵색인 스캔 또는 둘 다. 인덱스 액세스 방법이 제공하거나 제공 할 수있는 스캔 관련 기능은 다음과 같습니다.

indexscandesc
Ambeginscan (관계 색인 상관,
             int nkeys,
             int norderbys);

인덱스 스캔 준비. 그만큼nkeysNorderbys매개 변수는 스캔에 사용될 quals 및 주문 연산자의 수를 나타냅니다. 이들은 공간 할당 목적에 유용 할 수 있습니다. 스캔 키의 실제 값은 아직 제공되지 않았습니다. 결과는 Palloc'd 구조물이어야합니다. 구현 이유에 따라 인덱스 액세스 방법필수호출 하여이 구조물을 만듭니다RelationGetIndexScan (). 대부분의 경우Ambeginscan그 전화를 걸고 자물쇠를 얻는 것 이상은 거의 없습니다. 인덱스 스캔 스타트 업의 흥미로운 부분은Amrescan.

무효
Amrescan (IndexScandesc Scan,
          스캔 키 키,
          int nkeys,
          Scankey Orderbys,
          int norderbys);

새로운 스캔 키를 사용하여 인덱스 스캔을 시작하거나 다시 시작하십시오. (이전에 통과 한 키를 사용하여 다시 시작하려면 NULL이 전달됩니다및/또는Orderbys.) 키 나 주문별 운영자의 수가 전달 된 것보다 더 크게 허용되지 않습니다Ambeginscan. 실제로 재시작 기능은 중첩 루프 조인으로 새로운 외부 튜플을 선택할 때 사용되므로 새로운 키 비교 값이 필요하지만 스캔 키 구조는 동일하게 유지됩니다..

bool
AmgetTuple (IndexScandesc Scan,
            방향 방향);

주어진 스캔에서 다음 튜플을 가져와 주어진 방향으로 이동합니다 (인덱스의 앞으로 또는 뒤로). 튜플이 얻어지면 true를 반환하고, 일치하는 튜플이 남아 있지 않으면 거짓. 진정한 경우 튜플 티드가에 저장됩니다.스캔구조. 참고성공는 인덱스에 스캔 키와 일치하는 항목이 포함되어 있음을 의미합니다. 튜플이 여전히 힙에 여전히 존재하거나 발신자의 스냅 샷 테스트를 통과하지는 않습니다. 성공에,amgettupleSETscan- xs_rechecktrue 또는 false로. False는 인덱스 항목이 스캔 키와 일치하는 것이 확실하다는 것을 의미합니다. True는 이것이 확실하지 않다는 것을 의미하며, 스캔 키로 표시되는 조건은 힙 튜플을 가져온 후에 다시 확인해야합니다. 이 조항은 지원합니다Lossy인덱스 연산자. 재확인은 스캔 조건으로 만 확장됩니다. 부분 색인 술어 (있는 경우)는에 의해 다시 확인되지 않습니다.AmgetTuple발신자.

인덱스가 지원되는 경우PostgreSQL : 문서 : 11 : 11.9. 사설 토토 사이트 전용 스캔 및 사설 토토 사이트 커버(예 :Amcanreturn열에 대해 true를 반환합니다), 성공시 AM도 확인해야합니다scan- xs_want_itup어떤 열Amcanreturn거짓을 반환하면 널로 반환 할 수 있습니다. 데이터는 AN 형태로 반환 할 수 있습니다.Indextuple포인터가 저장된scan- xs_itup, 튜플 디스크립터와 함께scan- xs_itupdesc; 또는 a의 형태로Heappuple포인터 저장SCAN- XS_HITUP, 튜플 디스크립터와 함께scan- xs_hitupdesc. (후자의 형식은에 맞지 않을 수있는 데이터를 재구성 할 때 사용해야합니다.Indextuple.) 두 경우 모두 포인터에서 참조 된 데이터 관리는 액세스 방법의 책임입니다. 데이터는 적어도 다음까지 좋은 상태를 유지해야합니다amgettuple, Amrescan또는AMENDSCAN스캔 요청.

theamgettuple기능이 지원되는 경우에만 제공되어야합니다일반인덱스 스캔. 그렇지 않으면amgettuple필드indexamroutinestruct는 null로 설정해야합니다.

int64
AmgetBitMap (IndexScandesc Scan,
             tidbitmap *tbm);

주어진 스캔에서 모든 튜플을 가져와 발신자 지원에 추가Tidbitmap(즉, 이미 비트 맵에있는 세트에 대한 튜플 ID 세트). 가져온 튜플의 수는 반환됩니다 (예 : 일부 AMS는 중복을 감지하지 못하는 것과 같습니다). 비트 맵에 튜플 ID를 삽입하는 동안AmgetBitMap특정 튜플 ID에 대한 스캔 조건의 재확인이 필요하다는 것을 나타낼 수 있습니다. 이것은와 유사합니다XS_RECHECK출력 매개 변수amgettuple. 참고 : 현재 구현 에서이 기능에 대한 지원은 비트 맵 자체의 손실 저장에 대한 지원과 충돌하여 발신자는 스캔 조건과 재확인 가능한 튜플에 대한 부분 색인 술어 (있는 경우)를 다시 확인합니다. 그러나 항상 사실이 아닐 수도 있습니다.AmgetBitMapamgettuple동일한 인덱스 스캔에서 사용할 수 없습니다. 사용할 때도 다른 제한 사항이 있습니다AmgetBitMap, 설명 된대로PostgreSQL : 문서 : 11 : 61.3. 인덱스 스포츠 토토 결과.

theAmgetbitmap기능이 지원되는 경우에만 제공되어야합니다.비트 맵인덱스 스캔. 그렇지 않으면AmgetBitMap필드indexamroutinestruct는 null로 설정해야합니다.

무효
AmendScan (IndexScandesc Scan);

스캔 및 릴리스 리소스를 종료하십시오. 그만큼스캔구조물 자체는 해제되어서는 안되지만 액세스 방법으로 내부적으로 채취 한 잠금 또는 핀은 물론 해제되어야하며Ambeginscan및 기타 스캔 관련 기능.

무효
Ammarkpos (indexscandesc scan);

마크 현재 스캔 위치. 액세스 방법은 스캔 당 기억 한 스캔 위치 만 지원하면됩니다.

theammarkpos액세스 방법이 순서 스캔을 지원하는 경우에만 기능을 제공해야합니다. 그렇지 않으면ammarkpos필드indexamroutinestruct가 null로 설정 될 수 있습니다.

무효
amrestpos (indexscandesc scan);

스캔을 가장 최근에 표시된 위치로 복원하십시오.

theAmrestros액세스 방법이 순서 스캔을 지원하는 경우에만 기능을 제공해야합니다. 그렇지 않으면AMRESTROPS필드indexamroutinestruct가 null로 설정 될 수 있습니다.

일반 인덱스 스캔을 지원하는 것 외에도 일부 유형의 인덱스가 지원하기를 원할 수 있습니다병렬 인덱스 스캔. 인덱스 액세스 방법은 각 협력 프로세스가 평범한 비 평행 인덱스 스캔에 의해 수행 될 튜플의 하위 집합을 반환 할 수 있도록 사물을 배열해야하지만, 해당 하위 집합의 결합이 평범한 비 평행 지수 스캔에 의해 반환되는 튜플 세트와 동일합니다. 또한 병렬 스캔으로 반환 된 튜플의 전역 주문이 필요하지는 않지만 각 협력 백엔드 내에서 반환 된 튜플의 하위 집합의 순서는 요청 된 주문과 일치해야합니다. 병렬 인덱스 스캔을 지원하기 위해 다음 기능이 구현 될 수 있습니다.

크기
AmestimateParallelscan (void);

병렬 스캔을 수행하기 위해 액세스 방법이 필요한 동적 공유 메모리의 바이트 수를 추정하고 반환합니다. (이 숫자는 AM 독립 데이터에 필요한 공간의 양에 추가되어 있지 않습니다.ParallelIndexScandescData.)

병렬 스캔을 지원하지 않거나 필요한 추가 바이트의 수가 0 인 액세스 방법에 대해이 기능을 구현할 필요는 없습니다.

무효
aminitparallelscan (void *target);

이 기능은 병렬 스캔 시작시 동적 공유 메모리를 초기화하도록 호출됩니다.대상이전에 이전에 반환 된 바이트 수를 가리 킵니다AmestimateParallelscan,이 기능은 그 공간의 양을 사용하여 원하는 데이터를 저장할 수 있습니다.

병렬 스캔을 지원하지 않거나 공유 메모리 공간이 필요한 경우 초기화가 필요없는 경우 액세스 방법에 대해이 기능을 구현할 필요가 없습니다..

무효
amparallelrescan (indexscandesc scan);

이 기능은 구현 된 경우 병렬 인덱스 스캔을 다시 시작해야 할 때 호출됩니다. 에 의해 설정된 공유 상태를 재설정해야합니다.aminitparallelscan스캔이 처음부터 다시 시작되도록합니다.