토토 핫 9.2.24 문서 | ||||
---|---|---|---|---|
PostgreSQL : 문서 : 9.2 : 무지개 토토 잠금 고려 사항 | up | 52 장. 색인 액세스 방법 인터페이스 정의 | 다음 |
토토 핫SQL 시행 사용 고유성 제약 조건고유 인덱스, 여러 항목을 허용하지 않는 인덱스입니다 동일한 키로. 이 기능을 지원하는 액세스 방법 세트PG_AM.amcanuniquetrue. (현재, B- 트리 만 지원합니다.)
10605_11011
현재에 의해 충돌하는 유효한 행이 삭제 된 경우 거래, 괜찮습니다. (특히 업데이트 이후 새로운 삽입 전에 항상 이전 행 버전을 삭제합니다. 버전, 이것은 변경하지 않고 행에 업데이트 할 수 있습니다. 열쇠.)
충돌 행을 삽입 한 경우 커뮤니케이션이 제대로 삽입되어야합니다 그 거래가 유발되는지 기다리십시오. 그것이 롤백된다면 그러면 갈등이 없습니다. 삭제하지 않고 커밋되는 경우 다시 충돌하면 독창성 위반이 있습니다. (안에 우리는 다른 거래가 끝날 때까지 기다리고 그런 다음 가시성 검사를 다시 실행하십시오.)
마찬가지로, 충돌하는 유효한 행이 삭제 된 경우 그 대신 커미셔닝 된 트랜잭션 인 삽입자는 삽입해야합니다 그 거래가 커밋하거나 중단 될 때까지 기다린 다음 반복합니다. 테스트.
또한 독창성을보고하기 직전에 위의 규칙에 따라 액세스 방법은 삽입되는 행의 활기를 다시 확인하십시오. 그렇다면 저지른 죽은 다음 위반은보고되어야합니다. (이 경우 행을 삽입하는 일반적인 시나리오에서는 발생할 수 없습니다. 그것은 현재 거래에 의해 만들어졌습니다. 할 수 있습니다 동안 발생합니다고유 한 색인 생성 동시에, 그러나)
이 테스트를 적용하려면 인덱스 액세스 방법이 필요합니다. 그 자체는 중복 키가있는 것으로 표시된 모든 행의 상태 커밋 상태 인덱스 내용에 따라. 이것은 의심 할 여지없이 추악합니다 비 모성이지만 중복 작업을 저장합니다. 그런 다음 절충 행에 대한 인덱스 검색이 새로운 삽입 장소를 찾는 동안 본질적으로 반복 행의 인덱스 항목. 더구나, 피해야 할 분명한 방법은 없습니다 충돌 점검이 없어서는 안될 인종 조건 새로운 인덱스 항목 삽입.
고유 한 제약 조건이 연기 가능하면 추가가 있습니다
복잡성 : 새로운에 대한 인덱스 항목을 삽입 할 수 있어야합니다.
행, 그러나 끝까지 독창성 폭력 오류를 연기하십시오
성명서 또는 나중에. 불필요한 반복 검색을 피하기 위해
인덱스, 인덱스 액세스 방법은 예비를 수행해야합니다.
초기 삽입 중 고유성 점검. 이것이 그것을 보여 주면
분명히 상충되는 라이브 튜플은 없습니다.
그렇지 않으면, 우리는 시간이되면 재확인이 발생하도록 예약합니다.
제약 조건을 시행하십시오. 다시 회전 할 때, 둘 다
삽입 된 튜플과 같은 키를 가진 다른 튜플은 라이브입니다.
그런 다음 오류를보고해야합니다. (이 목적을 위해"Live"실제로 의미"인덱스 항목의 핫 체인의 튜플은입니다
살다".) 이것을 구현하려면Aminsert
함수가 전달 됨Checkunique다음 중 하나가있는 매개 변수
값 :
고유 _check_no독창성 점검을해야합니다 (이것은 독특하지 않습니다. 색인).
고유 한 _check_yes이것은 불가능한 고유 한 지수이며 독창성입니다 위에서 설명한대로 즉시 확인해야합니다.
고유 한 _check_partial독특한 제약이 연기 가능하다.토토 핫이 모드를 사용하여 삽입합니다
각 행의 인덱스 항목. 액세스 방법은 허용해야합니다
항목을 인덱스에 복제하고 잠재력을보고합니다
에서 false를 반환하여 복제물Aminsert
. 거짓이있는 각 행에 대해
반품, 연기 된 재확인이 예정됩니다.
액세스 방법은 가능한 행을 식별해야합니다 고유 한 제약을 위반하지만 오류가 아닙니다. 잘못된 긍정을보고합니다. 이를 통해 수표를 수행 할 수 있습니다 다른 거래가 완료되기를 기다리지 않고; 갈등 여기에보고 된 것은 오류로 취급되지 않으며 다시 확인됩니다. 나중에는 더 이상 갈등이되지 않을 수 있습니다.
고유 _check_existing이것은
잠재적 인 독창성 위반. 비록 이것이입니다
전화로 구현Aminsert
, 액세스 방법은not새 삽입
이 경우 색인 항목. 인덱스 항목이 이미 있습니다.
오히려 액세스 방법은
또 다른 라이브 인덱스 항목. 그렇다면 대상 행이 있다면
또한 여전히 살고 있습니다.보고 오류.
A에서 권장됩니다고유 _check_existing호출, 액세스 방법
대상 행에 실제로
색인의 기존 항목 및 그렇지 않은 경우 오류를보고합니다. 이것은
인덱스 튜플 값이 전달 되었기 때문에 좋은 생각Aminsert
재 계산. 색인 정의에 기능이 포함 된 경우
실제로 불변이 아니에요, 우리는 잘못된 영역을 확인하고있을 수 있습니다.
색인의. 대상 행이
RECHECK는 동일한 튜플을 스캔하고 있는지 확인합니다.
원래 삽입에 사용 된 값.