이 문서는 지원되지 않는 PostgreSQL 버전에 대한 것입니다.
다음에 대한 동일한 페이지를 보고 싶을 수도 있습니다.PostgreSQL : 문서 : 17 : 57.5. 외국 데이터 포장지에서의 행 배트맨 토토버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.

58.5. 외부 데이터 래퍼의 행 스포츠 토토 베트맨#

FDW의 기본 저장 메커니즘에 해당 행의 동시 업데이트를 방지하기 위해 개별 행을 잠그는 개념이 있는 경우 일반적으로 FDW가 일반적으로 사용되는 의미론에 최대한 가까운 근사치로 행 수준 스포츠 토토 베트맨을 수행하는 것이 좋습니다.포스트그레SQL테이블. 이와 관련하여 여러 가지 고려 사항이 있습니다.

중요한 결정 중 하나는 수행 여부입니다.조기 스포츠 토토 베트맨또는늦은 스포츠 토토 베트맨. 초기 잠금에서는 행이 기본 저장소에서 처음 검색될 때 잠기는 반면, 후기 잠금에서는 행을 잠가야 한다고 알려진 경우에만 잠깁니다. (로컬 검사 제한 또는 조인 조건에 따라 일부 행이 삭제될 수 있기 때문에 차이가 발생합니다.) 조기 스포츠 토토 베트맨은 훨씬 간단하고 원격 저장소로의 추가 왕복을 방지하지만 잠길 필요가 없는 행이 잠길 수 있어 동시성이 줄어들거나 심지어 예상치 못한 교착 상태가 발생할 수도 있습니다. 또한 지연 잠금은 잠길 행을 나중에 고유하게 다시 식별할 수 있는 경우에만 가능합니다. 바람직하게는 행 식별자는 다음과 같이 행의 특정 버전을 식별해야 합니다.PostgreSQLTID가 그렇습니다.

기본적으로,PostgreSQLFDW에 인터페이스할 때 잠금 고려 사항을 무시하지만 FDW는 핵심 코드의 명시적인 지원 없이 조기 스포츠 토토 베트맨을 수행할 수 있습니다. 설명된 API 함수는섹션 58.2.6, 다음에 추가됨PostgreSQL9.5, 원하는 경우 FDW가 지연 잠금을 사용하도록 허용합니다.

추가 고려사항은 다음과 같습니다.읽어 커밋됨격리 모드,포스트그레SQL일부 대상 튜플의 업데이트된 버전에 대해 제한 및 조인 조건을 다시 확인해야 할 수도 있습니다. 조인 조건을 다시 확인하려면 이전에 대상 튜플에 조인된 비대상 행의 복사본을 다시 가져와야 합니다. 표준으로 작업할 때포스트그레SQL테이블의 경우, 이는 조인을 통해 예상된 열 목록에 비대상 테이블의 TID를 포함시킨 다음 필요할 때 비대상 행을 다시 가져오는 방식으로 수행됩니다. 이 접근 방식은 조인 데이터 세트를 간결하게 유지하지만 저렴한 다시 가져오기 기능과 다시 가져올 행 버전을 고유하게 식별할 수 있는 TID가 필요합니다. 따라서 기본적으로 외부 테이블에 사용되는 접근 방식은 조인을 통해 예상되는 열 목록에 외부 테이블에서 가져온 전체 행의 복사본을 포함하는 것입니다. 이로 인해 FDW에 특별한 요구 사항은 없지만 병합 및 해시 조인 성능이 저하될 수 있습니다. 다시 가져오기 요구 사항을 충족할 수 있는 FDW는 첫 번째 방법을 선택할 수 있습니다.

다음을 위해업데이트또는삭제외국 테이블에서는 다음을 수행하는 것이 좋습니다.ForeignScan대상 테이블에 대한 작업은 아마도 다음과 같은 방법을 통해 가져오는 행에 대한 조기 스포츠 토토 베트맨을 수행합니다.업데이트를 위해 선택. FDW는 테이블이 다음과 같은지 여부를 감지할 수 있습니다.업데이트/삭제Relid를 다음과 비교하여 계획 시간에 목표를 정합니다.루트-분석-resultRelation또는 실행 시 다음을 사용하여ExecRelationIsTargetRelation(). 또 다른 가능성은 내에서 지연 스포츠 토토 베트맨을 수행하는 것입니다.ExecForeignUpdate또는ExecForeignDelete콜백이지만 이에 대한 특별한 지원은 제공되지 않습니다.

다음에 의해 잠기도록 지정된 외부 테이블의 경우업데이트/공유 선택명령, 그ForeignScan작업은 다음과 동등한 튜플을 가져와서 조기 스포츠 토토 베트맨을 다시 수행할 수 있습니다.업데이트/공유 선택. 대신 지연 잠금을 수행하려면 다음에 정의된 콜백 함수를 제공하세요.섹션 58.2.6. 에서GetForeignRowMarkType, 행 표시 옵션 선택ROW_MARK_EXCLUSIVE, ROW_MARK_NOKEYEXCLUSIVE, ROW_MARK_SHARE, 또는ROW_MARK_KEYSHARE요청된 잠금 강도에 따라 다릅니다. (핵심 코드는 선택한 네 가지 옵션에 관계없이 동일하게 작동합니다.) 다른 곳에서는 다음을 사용하여 이러한 유형의 명령으로 외부 테이블이 잠기도록 지정되었는지 여부를 감지할 수 있습니다.get_plan_rowmark계획 시간에 또는ExecFindRowMark실행 시; null이 아닌 rowmark 구조체가 반환되는지 여부뿐만 아니라 해당필드가 아님LCS_NONE.

마지막으로, 다음에서 사용되는 외부 테이블의 경우업데이트, 삭제또는업데이트/공유 선택명령이 행 잠금으로 지정되지 않은 경우 다음을 수행하여 전체 행을 복사하도록 기본 선택을 재정의할 수 있습니다.GetForeignRowMarkType옵션 선택ROW_MARK_REFERENCE스포츠 토토 베트맨 강도가 확인될 때LCS_NONE. 이로 인해 발생합니다RefetchForeignRow해당 값으로 호출됨마크유형; 그런 다음 새로운 잠금을 획득하지 않고 행을 다시 페치해야 합니다. (다음이 있는 경우GetForeignRowMarkType기능을 수행하지만 스포츠 토토 베트맨 해제된 행을 다시 가져오고 싶지 않다면 옵션을 선택하세요ROW_MARK_COPYforLCS_NONE.)

참조src/include/nodes/lockoptions.h,에 대한 댓글RowMarkType그리고PlanRowMarkinsrc/include/nodes/plannodes.h및에 대한 댓글ExecRowMarksrc/include/nodes/execnodes.h추가 정보를 확인하세요.