이 문서는 지원되지 않는 버전의 PostgreSQL을위한 것입니다.
당신은에 대해 같은 페이지를 보려고 할 수 있습니다현재버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

57.5. 외국 데이터 포장지에서의 행 토토 결과

FDW의 기본 스토리지 메커니즘에 해당 행의 동시 업데이트를 방지하기 위해 개별 행을 잠그는 개념이 있다면, FDW가 일반적으로 평범한 세포에 사용 된 것만 큼 근사치를 사용하여 줄 수준 토토 결과을 수행하는 것이 일반적으로PostgreSQL테이블. 이에 관련된 여러 고려 사항이 있습니다.

한 가지 중요한 결정은 수행 여부입니다.조기 토토 결과또는늦은 토토 결과. 초기 토토 결과시, 기저 스토어에서 처음 검색 될 때 행이 잠겨 있으며, 늦게 토토 결과하시면 행은 잠겨 있어야한다고 알려진 경우에만 잠겨 있습니다.PostgreSQLTIDS DO.

기본적으로PostgreSQLFDW와 인터페이스 할 때 잠금 고려 사항을 무시하지만 FDW는 핵심 코드의 명시 적 지원없이 조기 토토 결과을 수행 할 수 있습니다. API 기능에 설명 된섹션 57.2.5,PostgreSQL9.5, FDW가 원하는 경우 늦은 토토 결과을 사용하도록 허용합니다.

추가 고려 사항은입니다.Committed 읽기격리 모드,PostgreSQL일부 대상 튜플의 업데이트 된 버전에 대해 제한을 다시 확인하고 조건을 조정해야 할 수도 있습니다. 조정 조건을 다시 확인하려면 이전에 대상 튜플에 결합 된 비 표적 행의 사본을 다시 찾아야합니다.PostgreSQL테이블, 이것은 조인을 통해 투사 된 열 목록에 비 표적 테이블의 TID를 포함시킨 다음 필요할 때 비 표적 행을 다시 가져와서 수행합니다. 이 접근법은 조인 데이터 세트를 컴팩트하게 유지하지만 저렴한 리 페치 기능과 다시 가져올 행 버전을 고유하게 식별 할 수있는 TID가 필요합니다.

업데이트또는삭제외국 테이블에서 권장됩니다.Foreignscan대상 테이블에서의 작동은 아마도 등가를 통해 가져 오는 행에서 일찍 토토 결과을 수행합니다업데이트 선택. FDW는 테이블이인지 여부를 감지 할 수 있습니다.업데이트/삭제릴리스를 비교하여 계획 시간의 대상root-> parse-> ressultrelation또는 사용하여 실행 시간에execrelationistArgetRelation (). 대안 가능성은 내에서 늦게 토토 결과을 수행하는 것입니다.execforeignupdate또는execforeigndelete콜백, 이에 대한 특별한 지원은 제공되지 않습니다.

a에 의해 지정된 외국 테이블의 경우업데이트/공유 선택명령,Foreignscan작동 할 수있는 티플을 가져 와서 작동 할 수 있습니다.업데이트/공유 선택. 대신 늦게 토토 결과을 수행하려면에 정의 된 콜백 함수를 제공합니다.섹션 57.2.5. 안에getforeignrowmarkType, Rowmark 옵션 선택ROW_MARK_EXCLUSIC, ROW_MARK_NOKEYEXCLUSIC, row_mark_share, 또는row_mark_keyshare요청 된 토토 결과 강도에 따라. (핵심 코드는 당신이 선택한이 네 가지 옵션 중 어느 쪽을 선택하든 동일하게 작동합니다.) 다른 곳에서는 |get_plan_rowmark계획 시간 또는execfindrowmark실행 시간에; Null Rowmark Struct가 반환되는지 여부를 확인해야합니다.강도필드는LCS_NONE.

마지막으로, AN에서 사용되는 외국 테이블의 경우업데이트, 삭제또는업데이트/공유 선택명령이지만 행으로 지정되지 않으면 기본 선택을 무시하여 전체 행을 복사하여getforeignrowmarkType선택 옵션row_mark_reference잠금 강도를 볼 때LCS_NONE. 이로 인해Refetchforeignrow그 값으로 호출 될MarkType; 그런 다음 새로운 잠금 장치를 얻지 않고 행을 다시 가져와야합니다.getforeignrowmarkType함수이지만 토토 결과 해제 행을 다시 가져오고 싶지 않아 옵션을 선택하십시오row_mark_copyforLCS_NONE.)

참조src/include/nodes/lockoptions.h,RowmarkTypeandPlanrowmarkinsrc/include/nodes/plannodes.hexecrowmarkinsrc/include/nodes/execnodes.h추가 정보는