각 토토 액세스 방법은의 행으로 설명됩니다.PG_AM
시스템 카탈로그. 그만큼PG_AM
입력 이름과 A를 지정합니다핸들러 기능토토 액세스 방법의 경우. 이 항목은를 사용하여 생성 및 삭제할 수 있습니다.PostgreSQLand삭제 액세스 방법SQL 명령.
토토 액세스 메소드 핸들러 함수는 유형의 단일 인수를 수락하도록 선언해야합니다내부
그리고 의사 유형을 반환하려면index_am_handler
. 인수는 핸들러 기능이 SQL 명령에서 직접 호출되는 것을 방지하는 데 도움이되는 더미 값입니다. 함수의 결과는 palloc'd 유형의 구조 여야합니다indexamroutine
9539_9646indexamroutine
struct, Access Method 's라고도합니다api struct, 액세스 방법의 다양한 고정 특성을 지정하는 필드, 예를 들어 멀티 컬럼 토토를 지원할 수 있는지 여부와 같은 필드가 포함되어 있습니다. 더 중요한 것은 액세스 방법에 대한 모든 작업을 수행하는 액세스 방법에 대한 기능을 지원하는 포인터가 포함되어 있다는 것입니다. 이러한 지원 기능은 일반 C 기능이며 SQL 레벨에서는 보이거나 호출 할 수 없습니다. 지원 기능은에 설명되어 있습니다.PostgreSQL : 문서 : 18 : 63.2. 색인 액세스 와이즈 토토 기능.
구조indexamroutine
따라서 정의됩니다.
typedef struct indexamroutine nodetag 유형; /* * 우리가 트래버스/검색 할 수있는 총 전략 수 (운영자) *이 오전. AM에 고정 된 전략 할당 세트가없는 경우 0. */ UINT16 AMSTROCTIONS; / *이 AM이 사용하는 총 지원 기능 수 */ UINT16 amsupport; / * opclass 옵션 지원 기능 번호 또는 0 */ UINT16 AMOPTSPROCNUM; /* 색인 된 열의 값으로 주문이 지원됩니까? */ BOOL AMCANORDER; /* 인덱스 열에서 연산자의 결과로 주문을 지원합니까? */ BOOL AMCANORDERBYOP; /* AM은 해시 AM과 일치하는 API를 사용하여 해싱을 지원합니까? */ 부리 암카 하쉬; /* Opfamily 내의 운영자는 일관된 평등 의미를 가지고 있습니까? */ BOOL AMCONSESTERTERIVERICES; /* Opfamily 내의 운영자는 일관된 주문 의미를 가지고 있습니까? */ BOOL AMCONSESTENTORDERING; /* 후진 스캔을 지원합니까? */ Bol Amcanbackward; /* 고유 인덱스를 지원합니까? */ 부리 암 카나 니크; /* 다중 열 인덱스를 지원합니까? */ BOOL AMCANMULTICOL; /* 첫 번째 인덱스 열에 스캔이 제약을 받으려면 스캔이 필요합니까? */ bool amoptionalkey; /* scalararrayopexpr quals를 처리합니까? */ BOOL AMSEARCHARRAY; /* 손잡이가 null/is null quals가 아닌가? */ BOOL AMSEARCHNULLS; /* 색인 스토리지 데이터 유형이 열 데이터 유형과 다를 수 있습니까? */ 부리 암스토라; /*이 유형의 인덱스를 클러스터링 할 수 있습니까? */ bool amclusterable; /* 술어 잠금 장치를 처리합니까? */ BOOL AMPREDLOCKS; /* 병렬 스캔을 지원합니까? */ BOOL AMCANPARALLEL; /* 병렬 빌드를 지원합니까? */ BOOL AMCANBUILDPARALLEL; /* 조항에 포함 된 지원 열에 포함되어 있습니까? */ bool amcaninclude; /* AM MAINGENTENCE_WORK_MEM을 사용합니까? */ bool amusemainenage workmem; /* 적어도 블록에있는 모든 튜플이있는 튜플을 요약합니다. * 한 요약에 요약 */ 부리 앰스 미화; / * 또는 평행 진공 플래그 */ UINT8 AMPARALLELVACUUMOPTIONS; / * 인덱스에 저장된 데이터 유형 또는 변수 인 경우 Invalidoid */ OID AMKEYTEPE; / * 인터페이스 함수 */ Ambuild_function Ambuild; Ambuildempty_function Ambuildempty; aminsert_function aminsert; aminsertcleanup_function aminsertcleanup; / *는 널가 될 수 있습니다 */ Ambulkdelete_function Ambulkdelete; amvacuumcleanup_function amvacuumcleanup; amcanreturn_function amcanreturn; / *는 널가 될 수 있습니다 */ amcostestimate_function amcostestestimate; amgettreeheight_function amgettreeheight; / *는 널가 될 수 있습니다 */ 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; / *는 널가 될 수 있습니다 */ / * 계획 지원을위한 인터페이스 기능 */ amtranslate_strategy_function amtranslatestrategy; / *는 널가 될 수 있습니다 */ amtranslate_cmptype_function amtranslatecmptype; / *는 널가 될 수 있습니다 */ indexAmroutine;
유용하려면 토토 액세스 방법에 하나 이상이 있어야합니다운영자 가족and운영자 클래스정의토토 : 문서 : 18
, 스포츠 토토 결과 :
, pg_amop
및PG_AMPROC
. 이 항목을 통해 플래너는이 액세스 방법의 인덱스와 함께 어떤 종류의 쿼리 자격을 사용할 수 있는지 결정할 수 있습니다. 운영자 가족과 수업은에 설명되어 있습니다.PostgreSQL : 문서 : 18 : 36.16. 토토 결과에 대한 확장 인터페이스,이 장을 읽기위한 전제 조건 자료입니다.
개별 색인은 a에 의해 정의됩니다.pg_class
그것을 물리적 관계로 묘사하는 항목, 그리고 Apg_index
인덱스의 논리적 내용, 즉 관련 연산자 클래스에 의해 캡처 된대로 인덱스의 논리적 내용, 즉 인덱스 열 세트 및 해당 열의 의미를 보여주는 항목. 인덱스 열 (키 값)은 기본 테이블의 간단한 열이거나 테이블 행의 표현 일 수 있습니다. 인덱스 액세스 방법은 일반적으로 인덱스 키 값이 어디에서 나오는 지에 관심이 없지만 (항상 미리 계산 된 키 값이 적용됨)의 운영자 클래스 정보에 매우 관심이 있습니다.pg_index
. 이 카탈로그 항목 모두의 일부로 액세스 할 수 있습니다.관계
인덱스의 모든 작업에 전달되는 데이터 구조.
일부 깃발 필드indexamroutine
끔찍한 의미가 있습니다. 의 요구 사항Amcanunique
PostgreSQL : 문서 : 18 : 63.5. 토토 결과 고유성 점검. 그만큼Amcanmulticol
플래그는 액세스 방법이 멀티 키 컬럼 토토를 지원한다고 주장하는 동안AmoptionalKey
첫 번째 토토 열에 대한 토토 가능한 제한 조항이없는 경우 스캔을 허용한다고 주장합니다. 언제Amcanmulticol
false,AmoptionalKey
본질적으로 액세스 방법이 제한 조항없이 전체 토토 스캔을 지원하는지 여부를 말합니다. 다중 토토 열을 지원하는 액세스 방법필수첫 번째 열 후 일부 또는 모든 열에서 제한을 생략하는 스캔을 지원합니다. 그러나 첫 번째 토토 열에 약간의 제한이 표시되도록 허용되며, 이는 설정에 따라 신호를받습니다.AmoptionalKey
거짓. 색인이 하나의 이유am할 수 있습니다AmoptionalKey
거짓은 null 값을 색인하지 않으면입니다. 대부분의 토토 가능한 연산자는 엄격하므로 NULL 입력에 대해 TRUE를 반환 할 수 없으므로 NULL 값에 대한 토토 항목을 저장하지 않는 것이 매력적입니다. 어쨌든 토토 스캔으로 반환 할 수 없습니다. 그러나 토토 스캔에 주어진 토토 열에 대한 제한 조항이 없을 때이 인수는 실패합니다. 실제로 이것은를 가지고 있음을 의미합니다.amoptionalkey
true는 널 토토 널을 인덱싱해야합니다. 플래너는 스캔 키가 전혀없는 토토를 사용하기로 결정할 수 있기 때문입니다. 관련 제한은 여러 토토 열을 지원하는 토토 액세스 방법입니다.필수처음 첫 번째 열에서 널 값을 지원합니다. 플래너는 토토가 이러한 열을 제한하지 않는 쿼리에 사용될 수 있다고 가정하기 때문에. 예를 들어 (a, b)에 대한 색인과 쿼리를 고려하십시오.여기서 a = 4
. 시스템은 토토가로 행을 스캔하는 데 사용될 수 있다고 가정합니다.a = 4
, 토토가 행을 생략하면B
그러나 첫 번째 토토 된 열이 null 인 행을 생략해도 괜찮습니다. 색인 널을 사용하는 토토 액세스 방법도 설정 될 수 있습니다amsearchnulls
, 그것이 지원한다는 것을 나타냅니다is null
and검색 조건으로 조항.
theamcaninclude
플래그는 액세스 방법이 지원되는지 여부를 나타냅니다“포함”열은 키 열을 넘어서 추가 열을 (처리하지 않고) 저장할 수 있습니다. 앞 단락의 요구 사항은 주요 열에만 적용됩니다. 특히의 조합Amcanmulticol
=거짓
andamcaninclude
=true
합리적입니다 : 하나의 키 열만있을 수 있지만 열이 포함될 수 있음을 의미합니다. 또한 포함 된 열은 독립적으로 무효가되어야합니다.AmoptionalKey
.
theamsummarizing
플래그는 액세스 방법이 토토 된 튜플을 요약하는지 여부를 나타냅니다. 개별 튜플을 가리키지 않고 범위를 차단하는 액세스 방법 (예 :브린), 허용hot계속하기위한 최적화. 이것은 색인 predicates에서 참조 된 속성에 적용되지 않으며, 그러한 속성의 업데이트는 항상 비활성화hot.