인덱스 액세스 토토 사이트 추천이 제공 해야하는 색인 구성 및 유지 관리 기능indexamroutine
are :
indexbuildresult * Ambuild (관계 쌓기, 관계 색인 상관, indexInfo *indexInfo);
새 인덱스 구축. 인덱스 관계는 물리적으로 생성되었지만 비어 있습니다. 액세스 토토 사이트 추천에 필요한 고정 된 데이터와 테이블에 이미 존재하는 모든 튜플의 항목으로 채워야합니다. 일반적으로Ambuild
함수가 호출됩니다table_index_build_scan ()
기존 튜플의 테이블을 스캔하고 인덱스에 삽입 해야하는 키를 계산합니다. 이 함수는 새 인덱스에 대한 통계를 포함하는 Palloc'D 구조물을 반환해야합니다. 그만큼amcanbuildparallel
플래그는 액세스 방법이 병렬 인덱스 빌드를 지원하는지 여부를 나타냅니다. 로 설정된 경우true
, 시스템은 빌드에 평행 작업자를 할당하려고 시도합니다. 비 평행 인덱스 빌드 만 지원하는 액세스 방법은이 플래그를 설정해야합니다.false
.
무효 Ambuildempty (관계 색인 상관);
빈 색인을 작성하고 초기화 포크 (에 쓰십시오.init_forknum
11575_11768
bool Aminsert (관계 색인 상관, 데이텀 *값, bool *isnull, ItemPointer heap_tid, 관계 중심, indexUniqueCheck Checkunique, bool indexunged, indexInfo *indexInfo);
새 튜플을 기존 인덱스에 삽입하십시오. 그만큼값
andisnull
배열은 인덱싱 할 키 값을 제공하고heap_tid
색인화되는 TID입니다. 액세스 방법이 고유 인덱스를 지원하는 경우 (ITSAmcanunique
플래그는 사실입니다) 그런 다음Checkunique
수행 할 독창성 검사 유형을 나타냅니다. 이것은 고유 한 제약이 연기 가능 여부에 따라 다릅니다. 보다PostgreSQL : 문서 : 17 : 62.5. 토토 사이트 순위 고유성 점검자세한 내용. 일반적으로 액세스 토토 사이트 추천은 만 있으면됩니다.Heaprelation
고유성 검사를 수행 할 때 매개 변수 (그 이후로 튜플 라이벌을 확인하기 위해 힙을 조사해야합니다)..
theindexunchanged
부울 값은 색인화 할 튜플의 특성에 대한 힌트를줍니다. 그것이 사실 일 때, 튜플은 인덱스의 기존 튜플의 복제입니다. 새로운 튜플은 논리적으로 변하지 않은 후속 MVCC 튜플 버전입니다. 이것은 an 일 때 발생합니다.업데이트
인덱스에서 다루는 열을 수정하지는 않지만 그럼에도 불구하고 인덱스에 새 버전이 필요합니다. 인덱스 AM은이 힌트를 사용하여 동일한 논리 행의 많은 버전이 축적되는 인덱스의 일부에서 상향식 색인 삭제를 적용하기로 결정할 수 있습니다. 비 키 열 또는 부분 색인 술어에만 나타나는 열을 업데이트하는 것은 값의 값에 영향을 미치지 않습니다indexunchanged
. 핵심 코드는 각 튜플의를 결정합니다.indexunchanged
잘못된 양성과 오 탐지를 모두 허용하는 낮은 오버 헤드 접근법을 사용한 값. 인덱스 AMS는 치료해서는 안됩니다indexunchanged
튜플 가시성 또는 버전에 대한 권위있는 정보 소스.
함수의 부울 결과 값은에만 중요합니다.Checkunique
is고유 한 _check_partial
. 이 경우 실제 결과는 새로운 항목이 고유 한 반면, 허위는 비 유적 일 수 있음을 의미합니다 (그리고 지연된 독창성 점검이 예정되어 있어야 함). 다른 경우 지속적인 잘못된 결과가 권장됩니다.
일부 인덱스는 모든 튜플을 색인화하지 않을 수 있습니다. 튜플을 색인화하지 않으면Aminsert
아무것도하지 않고 돌아와야합니다.
인덱스가 SQL 문의 연속 인덱스 삽입에서 데이터를 캐시하려면 공간을 할당 할 수 있습니다.indexInfo- ii_context
그리고 데이터에 대한 포인터를 저장indexInfo- ii_amcache
(처음에는 null이 될 것입니다). 인덱스 삽입 후 메모리 이외의 리소스를 해제 해야하는 경우Aminsertcleanup
제공 될 수 있으며, 메모리가 해제되기 전에 호출 될 수 있습니다.
무효 Aminsertcleanup (관계 인덱스 관계, indexInfo *indexInfo);
연속 삽입물을 가로 질러 유지 된 상태 정리indexInfo- ii_amcache
. 이것은 데이터에 추가 정리 단계 (예 : 고정 버퍼를 릴리스)가 필요한 경우 유용하며 메모리를 충분히 방출하는 것이 충분하지 않습니다.
IndexBulkDeleteresult * Ambulkdelete (indexvacuuminfo *info, IndexBulkDeleterEsult *통계, indexBulkDeleteCallback 콜백, void *callback_state);
인덱스에서 튜플을 삭제합니다. 이것은입니다.“벌크 삭제”전체 인덱스를 스캔하고 각 항목을 확인하여 삭제 해야하는지 확인하여 구현하려는 작업. 통과콜백
함수는 스타일로 호출해야합니다콜백 (
, 참조 된 TID로 식별 된 특정 인덱스 항목이 삭제 될지 여부를 결정합니다. 삭제 작업의 영향에 대한 통계를 포함하는 NULL 또는 PALLOC'D 구조물을 반환해야합니다. 정보를 전달할 필요가 없으면 NULL을 반환해도 괜찮습니다TID
, callback_state) 반환 boolamvacuumcleanup
.
제한 때문에maintenance_work_mem
, Ambulkdelete
많은 튜플을 삭제할 때 두 번 이상 호출해야 할 수도 있습니다. 그만큼통계
인수는이 지수에 대한 이전 호출의 결과입니다 (a 내 첫 번째 호출의 경우 null입니다.진공
작동). 이를 통해 AM은 전체 작업에 걸쳐 통계를 축적 할 수 있습니다. 일반적으로,Ambulkdelete
통과 된 경우 동일한 구조물을 수정하고 반환합니다통계
IndexBulkDeleteresult * amvacuumcleanup (indexvacuuminfo *info, indexbulkdeleteresult *stats);
A 후 청소진공
작동 (0 이상Ambulkdelete
전화). 이것은 인덱스 통계를 반환하는 것 외에는 아무것도 할 필요는 없지만 빈 색인 페이지를 되 찾는 것과 같은 대량 정리를 수행 할 수 있습니다.통계
마지막Ambulkdelete
통화 반환 또는 null ifAmbulkdelete
튜플을 삭제할 필요가 없기 때문에 호출되지 않았습니다. 결과가 null이 아닌 경우 palloc'd 구조물이어야합니다. 포함 된 통계는 업데이트에 사용됩니다pg_class
진공
ifVerbose
가 제공됩니다. 인덱스가 전혀 변경되지 않으면 NULL을 반환해도 괜찮습니다진공
작동이지만 그렇지 않으면 올바른 통계를 반환해야합니다.
amvacuumcleanup
|분석
작동. 이 경우통계
항상 null이며 모든 반환 값은 무시됩니다. 이 사례는 점검을 통해 구별 할 수 있습니다Info- Analyze_only
. 액세스 토토 사이트 추천은 그러한 통화에서 삽입 후 청소를 제외하고는 아무것도하지 않는 것이 좋습니다.
bool amcanreturn (관계 인덱스 릴레이션, int attno);
인덱스가 지원할 수 있는지 확인인덱스 전용 스캔주어진 열에서 열의 원래 색인 값을 반환하여. 속성 번호는 1 기반입니다. 즉, 첫 번째 열 Attno는 1입니다. 이 함수는 포함 된 열에 포함 된 열에는 항상 진정을 반환해야합니다 (지원되는 경우). 액세스 방법이 인덱스 전용 스캔을 전혀 지원하지 않으면Amcanreturn
필드indexamroutine
struct는 null로 설정할 수 있습니다.
무효 amcostestestimate (plannerinfo *root, IndexPath *Path, 더블 루프 _count, Cost *IndexStartUpCost, 비용 *IndextOtalCost, 선택성 *indexSelectivity, 이중 *색인 상관, Double *indexpages);
지수 스캔 비용을 추정합니다. 이 기능은 완전히 설명됩니다PostgreSQL :, 아래.
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
필드indexamroutine
struct는 null로 설정할 수 있습니다. 그렇지 않으면amproperty
메소드가 호출됩니다index_oid
andattno
두 Zero forpg_indexam_has_property
전화 또는index_oid
유효 및attno
Zero forpg_index_has_property
전화 또는index_oid
유효 및attno
0보다 큰pg_index_column_has_property
전화.prop
테스트중인 속성을 식별하는 열거 값입니다.propname
는 원래 속성 이름 문자열입니다. 핵심 코드가 속성 이름을 인식하지 못하면prop
isamprop_unknown
. 액세스 방법은 확인하여 사용자 정의 속성 이름을 정의 할 수 있습니다propname
경기의 경우 (사용PG_STRCASECMP
핵심 코드와 일치하기 위해 일치합니다); 핵심 코드에 알려진 이름의 경우 검사하는 것이 좋습니다prop
. 인 경우amproperty
메소드 리턴true
그런 다음 속성 테스트 결과를 결정했습니다. 설정해야합니다*res
반환 또는 설정하기 위해 부울 가치로*ISNULL
totrue
null을 반환합니다. (참조 된 변수 모두 초기화거짓
통화 전.) 인 경우amproperty
메소드 리턴거짓
핵심 코드는 속성 테스트 결과를 결정하기위한 일반 논리를 진행합니다.
주문 운영자를 지원하는 액세스 방법을 구현해야합니다amprop_distance_orderable
핵심 코드가이를 수행하는 토토 사이트 추천을 알지 못하고 NULL을 반환 할 수 있으므로 속성 테스트. 구현이 유리할 수도 있습니다amprop_returnable
테스트, 인덱스를 열고 호출하는 것보다 더 저렴하게 수행 할 수있는 경우Amcanreturn
, 핵심 코드의 기본 동작입니다. 기본 동작은 다른 모든 표준 속성에 대해 만족해야합니다.
char * Ambuildphasename (int64 phasenum);
주어진 빌드 위상 번호의 텍스트 이름을 반환합니다. 위상 수는 숫자를 통해 인덱스 빌드 중에보고 된 것입니다.PGSTAT_PROGRESS_UPDATE_PARAM
인터페이스. 그런 다음 위상 이름이에 노출됩니다.PG_STAT_PROGRESS_CREATE_INDEX
보기
bool amvalidate (Oid opclassoid);
액세스 방법이 합리적으로 수행 할 수있는 한 지정된 운영자 클래스의 카탈로그 항목을 확인하십시오. 예를 들어, 여기에는 필요한 모든 지원 기능이 제공되는 테스트가 포함될 수 있습니다. 그만큼amvalidate
OPCLASS가 유효하지 않은 경우 함수가 False를 반환해야합니다. 에 문제 가보고되어야합니다.EREPORT
메시지, 일반적으로info
레벨.
무효 Amadjustmembers (OID Opfamilyoid, Oid opclassoid, 목록 *운영자, 목록 *함수);
액세스 토토 사이트 추천이 합리적으로 수행 할 수있는 한 제안 된 새로운 운영자 및 기능 구성원을 확인하고 기본값이 만족스럽지 않은 경우 종속성 유형을 설정하십시오. 이것은 동안 호출됩니다운영자 클래스 만들기
운영자 제품군 추가
; 후자의 경우opclassoid
isInvalidoid
. 그만큼List
인수는의 목록입니다.OpfamilyMember
structs, 정의 된대로amapi.h
. 이 기능에 의해 수행 된 테스트는 일반적으로에 의해 수행 된 것의 하위 집합입니다.AmValidate
이후AmadjustMembers
전체 회원 세트를보고 있다고 가정 할 수 없습니다. 예를 들어, 지원 함수의 서명을 확인하는 것이 합리적이지만 필요한 모든 지원 기능이 제공되는지 확인하지는 않습니다. 오류를 던지면 모든 문제를보고 할 수 있습니다. 의존성 관련 필드OpfamilyMember
Structs는 핵심 코드에 의해 초기화되어 OPClass에 대한 하드 종속성을 생성하여운영자 클래스 만들기
, 또는 이것이 옵 패밀리에 대한 소프트 종속성이운영자 제품군 ADD
. AmadjustMembers
다른 행동이 더 적절한 경우이 필드를 조정할 수 있습니다. 예를 들어, GIN, GIST 및 SP-GIST는 운영자와 OPCLASS 간의 연결이 이러한 색인 유형에서 상대적으로 약하기 때문에 운영자 멤버는 항상 OPFAMILY에 대한 소프트 종속성을 갖도록 설정했습니다. 따라서 운영자 멤버를 자유롭게 추가하고 제거 할 수 있도록하는 것이 합리적입니다. 선택적 지원 기능은 일반적으로 소프트 종속성이 주어 지므로 필요한 경우 제거 할 수 있습니다.
물론 인덱스의 목적은 색인과 일치하는 튜플 스캔을 지원하는 것입니다여기서
조건, 종종 a라고합니다.예선또는스캔 키. 인덱스 스캐닝의 의미론은 더 자세히 설명합니다PostgreSQL : 문서 : 17 : 62.3. 인덱스 범퍼카 토토, 아래. 인덱스 액세스 방법이 지원할 수 있습니다“일반”색인 스캔,“비트 맵”인덱스 스캔 또는 둘 다. 인덱스 액세스 방법이 제공하거나 제공 할 수있는 스캔 관련 기능은 다음과 같습니다.
indexscandesc Ambeginscan (관계 색인 상관, int nkeys, int norderbys);
인덱스 스캔 준비. 그만큼nkeys
andNorderbys
매개 변수는 스캔에 사용될 quals 및 주문 연산자의 수를 나타냅니다. 이들은 공간 할당 목적에 유용 할 수 있습니다. 스캔 키의 실제 값은 아직 제공되지 않았습니다. 결과는 Palloc'd 구조물이어야합니다. 구현 이유에 따라 인덱스 액세스 방법필수호출 하여이 구조물을 만듭니다RelationGetIndexScan ()
. 대부분의 경우Ambeginscan
그 전화를 걸고 자물쇠를 얻는 것 이상은 거의 없습니다. 인덱스 스캔 스타트 업의 흥미로운 부분은Amrescan
.
무효 Amrescan (IndexScandesc Scan, 스캔 키 키, int nkeys, Scankey Orderbys, int norderbys);
새로운 스캔 키를 사용하여 인덱스 스캔을 시작하거나 다시 시작하십시오. (이전에 통과 한 키를 사용하여 다시 시작하려면 NULL이 전달됩니다키
및/또는Orderbys
.) 키 나 주문별 운영자의 수는 통과 된 것보다 더 크게 허용되지 않습니다Ambeginscan
. 실제로 재시작 기능은 중첩 루프 조인으로 새로운 외부 튜플을 선택할 때 사용되므로 새로운 키 비교 값이 필요하지만 스캔 키 구조는 동일하게 유지됩니다..
bool AmgetTuple (IndexScandesc Scan, 방향 방향);
주어진 스캔에서 다음 튜플을 가져와 주어진 방향으로 이동합니다 (인덱스의 앞뒤). 튜플이 얻어지면 true를 반환하고, 일치하는 튜플이 남아 있지 않으면 거짓. 진정한 경우 튜플 티드가에 저장됩니다.스캔
구조. 참고“성공”는 인덱스에 스캔 키와 일치하는 항목이 포함되어 있음을 의미합니다. 튜플이 힙에 여전히 존재하거나 발신자의 스냅 샷 테스트를 통과하지는 않습니다. 성공에,AmgetTuple
꼭 설정해야scan- xs_recheck
true 또는 false로. False는 인덱스 항목이 스캔 키와 일치하는 것이 확실하다는 것을 의미합니다. True는 이것이 확실하지 않다는 것을 의미하며, 스캔 키로 표시되는 조건은 힙 튜플을 가져온 후에 다시 확인해야합니다. 이 조항은 지원합니다“Lossy”색인 연산자. 재확인은 스캔 조건으로 만 확장됩니다. 부분 색인 술어 (있는 경우)는에 의해 다시 확인되지 않습니다.amgettuple
발신자.
인덱스가 지원되는 경우PostgreSQL : 문서 : 17 : 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
필드indexamroutine
struct는 null로 설정해야합니다.
int64 AmgetBitMap (IndexScandesc Scan, tidbitmap *tbm);
주어진 스캔에서 모든 튜플을 가져 와서 발신자 지원에 추가Tidbitmap
(즉, 이미 비트 맵에있는 세트에 대한 튜플 ID 세트). 가져온 튜플의 수는 반환됩니다 (예 : 일부 AMS는 중복을 감지하지 못하는 것과 같습니다). 비트 맵에 튜플 ID를 삽입하는 동안AmgetBitMap
특정 튜플 ID에 대한 스캔 조건의 재확인이 필요하다는 것을 나타낼 수 있습니다. 이것은와 유사합니다xs_recheck
출력 매개 변수amgettuple
. 참고 : 현재 구현 에서이 기능에 대한 지원은 비트 맵 자체의 손실 저장에 대한 지원과 충돌하여 발신자는 스캔 조건과 재확인 가능한 튜플에 대한 부분 색인 술어 (있는 경우)를 다시 확인합니다. 그러나 항상 사실이 아닐 수도 있습니다.AmgetBitMap
andAmgetTuple
동일한 인덱스 스캔에서 사용할 수 없습니다. 사용할 때도 다른 제한 사항이 있습니다AmgetBitMap
, 설명 된대로PostgreSQL : 문서 : 17 : 62.3. 인덱스 범퍼카 토토.
theAmgetBitMap
액세스 방법이 지원되는 경우에만 기능을 제공해야합니다“비트 맵”인덱스 스캔. 그렇지 않으면AmgetBitMap
필드indexamroutine
struct는 null로 설정해야합니다.
무효 AmendScan (IndexScandesc Scan);
스캔 및 릴리스 리소스를 종료하십시오. 그만큼스캔
구조물 자체는 해제되지 않아야하지만, 액세스 방법으로 내부적으로 채취 한 잠금 또는 핀과을 해제해야합니다.Ambeginscan
및 기타 스캔 관련 기능.
무효 Ammarkpos (indexscandesc scan);
마크 현재 스캔 위치. 액세스 방법은 스캔 당 기억 한 스캔 위치 만 지원하면됩니다.
theammarkpos
액세스 방법이 순서 스캔을 지원하는 경우에만 기능을 제공해야합니다. 그렇지 않으면Ammarkpos
필드indexamroutine
struct가 null로 설정 될 수 있습니다.
무효 amrestpos (indexscandesc scan);
스캔을 가장 최근에 표시된 위치로 복원하십시오.
theAMRESTROPS
액세스 방법이 순서 스캔을 지원하는 경우에만 기능을 제공해야합니다. 그렇지 않으면AMRESTROPS
필드indexamroutine
struct가 null로 설정 될 수 있습니다.
일반 인덱스 스캔을 지원하는 것 외에도 일부 유형의 인덱스가 지원하기를 원할 수 있습니다병렬 인덱스 스캔. 인덱스 액세스 방법은 각 협력 프로세스가 평범한 비 평행 인덱스 스캔에 의해 수행 될 튜플의 하위 집합을 반환 할 수 있도록 사물을 배열해야하지만, 해당 하위 집합의 결합이 평범한 비 평행 지수 스캔에 의해 반환되는 튜플 세트와 동일합니다. 또한 병렬 스캔으로 반환 된 튜플의 전역 주문이 필요하지는 않지만 각 협력 백엔드 내에서 반환 된 튜플의 하위 집합의 순서는 요청 된 주문과 일치해야합니다. 병렬 인덱스 스캔을 지원하기 위해 다음 기능이 구현 될 수 있습니다.
크기 AmestimateParallelscan (int nkeys, int norderbys);
병렬 스캔을 수행하기 위해 액세스 방법이 필요한 동적 공유 메모리의 바이트 수를 추정하고 반환합니다. (이 숫자는 AM 독립 데이터에 필요한 공간의 양에 추가되어 있지 않습니다.ParallelIndexScandescData
.)
thenkeys
andNorderbys
매개 변수는 스캔에 사용될 quals 및 주문 연산자의 수를 나타냅니다. 동일한 값이 전달됩니다Amrescan
. 스캔 키의 실제 값은 아직 제공되지 않았습니다.
병렬 스캔을 지원하지 않거나 필요한 추가 바이트의 수가 0 인 액세스 방법에 대해이 기능을 구현할 필요는 없습니다.
무효 aminitparallelscan (void *target);
이 기능은 병렬 스캔 시작시 동적 공유 메모리를 초기화하도록 호출됩니다.대상
최소한 이전에 반환 된 바이트 수를 가리킬 것입니다AmestimateParallelscan
,이 기능은 그 공간을 사용하여 원하는 데이터를 저장할 수 있습니다.
병렬 스캔을 지원하지 않거나 공유 메모리 공간이 필요한 경우 초기화가 필요없는 경우 액세스 방법에 대해이 기능을 구현할 필요가 없습니다..
무효 amparallelrescan (indexscandesc scan);
이 기능은 구현 된 경우 병렬 인덱스 스캔을 다시 시작해야 할 때 호출됩니다. 에 의해 설정된 공유 상태를 재설정해야합니다.aminitparallelscan
스캔이 처음부터 다시 시작되도록.
올바른 문서에 아무것도 표시되면 일치하지 않습니다. 특정 기능에 대한 귀하의 경험 또는 추가 설명이 필요합니다. 사용이 양식문서 문제를보고하려면