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