57.2. 사설 토토 사이트 데이터 래퍼 콜백 루틴

FDW 핸들러 함수는 palloc'd를 반환합니다.Fdw루틴아래 설명된 콜백 함수에 대한 포인터를 포함하는 구조체입니다. 스캔 관련 기능은 필수이며 나머지는 선택사항입니다.

Fdw루틴구조체 유형이 다음에서 선언되었습니다.src/include/foreign/fdwapi.h, 자세한 내용은 참조하세요.

57.2.1. 사설 토토 사이트 테이블 스캔을 위한 FDW 루틴

공허
GetForeignRelSize(PlannerInfo *root,
                  RelOptInfo *baserel,
                  Oid foreigntableid);

사설 토토 사이트 테이블에 대한 관계 크기 추정치를 얻습니다. 이는 사설 토토 사이트 테이블을 스캔하는 쿼리 계획 초기에 호출됩니다.루트은 쿼리에 대한 플래너의 전역 정보입니다.바셀이 테이블에 대한 플래너의 정보입니다. 그리고사설 토토 사이트테이블ID이것은pg_class사설 토토 사이트 테이블의 OID. (사설 토토 사이트테이블ID플래너 데이터 구조에서 얻을 수 있지만 노력을 절약하기 위해 명시적으로 전달되었습니다.)

이 기능은 업데이트되어야 합니다.바셀-행제한 조건에 의해 수행된 필터링을 고려한 후 테이블 스캔에서 반환된 예상 행 수입니다. 초기값은baserel-행는 단지 일정한 기본 추정치일 뿐이며 가능하다면 대체되어야 합니다. 이 기능은 업데이트를 선택할 수도 있습니다.바렐-너비평균 결과 행 너비에 대한 더 나은 추정치를 계산할 수 있는 경우. (초기값은 열 데이터 유형과 마지막 열의 평균 너비 값을 기준으로 합니다.분석.) 또한 이 기능은 업데이트될 수 있습니다.baserel-튜플외부 테이블의 총 행 수를 더 잘 추정할 수 있는 경우. (초기값은 다음과 같습니다.pg_class.reltuples마지막으로 본 총 행 수를 나타냅니다.분석; 그럴 것이다-1아니면분석이 사설 토토 사이트 테이블에서 수행되었습니다.)

참조PostgreSQL : 문서 : 14 : 57.4. 외국 데이터 포장 쿼리 토토 캔추가 정보를 확인하세요.

공허
GetForeignPaths(PlannerInfo *root,
                RelOptInfo *baserel,
                Oid foreigntableid);

사설 토토 사이트 테이블에서 스캔을 위한 가능한 액세스 경로를 생성하십시오. 이는 쿼리 계획 중에 호출됩니다. 매개변수는 와 동일합니다.GetForeignRelSize, 이미 호출되었습니다.

이 함수는 최소한 하나의 액세스 경로를 생성해야 합니다(ForeignPath노드)를 사용하여 사설 토토 사이트 테이블을 스캔하고 호출해야 합니다.add_path각 경로를 추가하려면baserel-경로 목록. 사용하는 것이 좋습니다.create_foreignscan_path빌드하기 위해ForeignPath노드. 이 함수는 여러 액세스 경로(예: 유효한 경로)를 생성할 수 있습니다.경로키미리 정렬된 결과를 나타냅니다. 각 액세스 경로에는 예상 비용이 포함되어야 하며, 의도한 특정 검색 방법을 식별하는 데 필요한 FDW 개인정보가 포함될 수 있습니다.

참조PostgreSQL : 문서 : 14 : 57.4. 외국 데이터 포장 쿼리 토토 캔추가 정보를 확인하세요.

ForeignScan *
GetForeignPlan(PlannerInfo *root,
               RelOptInfo *baserel,
               Oid foreigntableid,
               ForeignPath *best_path,
               목록 *tlist,
               *scan_clauses 나열,
               계획 *outer_plan);

만들기ForeignScan선택한 외부 액세스 경로의 노드를 계획합니다. 이는 쿼리 계획이 끝날 때 호출됩니다. 매개변수는 다음과 같습니다.GetForeignRelSize및 선택된 것ForeignPath(이전에 제작됨GetForeignPaths, GetForeignJoinPaths또는GetForeignUpperPaths), 계획 노드에서 내보낼 대상 목록, 계획 노드에서 시행할 제한 조항 및의 사설 토토 사이트 하위 계획ForeignScan, 다음에서 수행하는 재검사에 사용됩니다.RecheckForeignScan. (경로가 기본 관계가 아닌 조인용인 경우,사설 토토 사이트테이블IDisInvalidOid.)

이 함수는 다음을 생성하고 반환해야 합니다.ForeignScan계획 노드; 사용하는 것이 좋습니다.make_foreignscan빌드하기 위해ForeignScan노드.

참조PostgreSQL : 문서 : 14 : 57.4. 외국 데이터 포장 쿼리 토토 캔추가 정보를 확인하세요.

공허
BeginForeignScan(ForeignScanState *노드,
                 int 플래그);

사설 토토 사이트 스캔 실행을 시작합니다. 이는 실행기 시작 중에 호출됩니다. 스캔을 시작하기 전에 필요한 초기화를 수행해야 하지만 실제 스캔 실행을 시작해서는 안 됩니다(첫 번째 호출 시 수행되어야 함).IterateForeignScan).ForeignScanState노드가 이미 생성되었지만, 그fdw_state필드가 여전히 NULL입니다. 스캔할 테이블에 대한 정보는를 통해 액세스할 수 있습니다.ForeignScanState노드(특히, 기본에서ForeignScan에서 제공한 FDW 개인 정보가 포함된 계획 노드GetForeignPlan). 플래그이 계획 노드에 대한 실행기의 작동 모드를 설명하는 플래그 비트를 포함합니다.

언제든지 주의하세요(플래그 및 EXEC_FLAG_EXPLAIN_ONLY)이 사실입니다. 이 함수는 사설 토토 사이트에 표시되는 작업을 수행해서는 안 됩니다. 노드 상태를 유효하게 만드는 데 필요한 최소한의 작업만 수행해야 합니다.ExplainForeignScan그리고EndForeignScan.

TupleTableSlot *
IterateForeignScan(ForeignScanState *node);

사설 토토 사이트 소스에서 한 행을 가져와 튜플 테이블 슬롯(노드의ScanTupleSlot이 목적으로 사용되어야 합니다). 더 이상 사용할 수 있는 행이 없으면 NULL을 반환합니다. 튜플 테이블 슬롯 인프라를 사용하면 물리적 또는 가상 튜플을 반환할 수 있습니다. 대부분의 경우 성능 측면에서 후자를 선택하는 것이 더 좋습니다. 이는 호출 간에 재설정되는 단기 메모리 컨텍스트에서 호출됩니다. 에서 메모리 컨텍스트를 생성합니다.BeginForeignScan더 오래 지속되는 저장 공간이 필요하거나 다음을 사용하는 경우es_query_cxt노드의EState.

반환된 행은 다음과 일치해야 합니다.fdw_scan_tlist대상 목록이 제공된 경우, 그렇지 않은 경우 스캔 중인 사설 토토 사이트 테이블의 행 유형과 일치해야 합니다. 필요하지 않은 가져오기 열을 최적화하기로 선택한 경우 해당 열 위치에 null을 삽입하거나fdw_scan_tlist해당 열이 생략된 목록입니다.

참고PostgreSQL의 실행자는 반환된 행이 외부 테이블에 정의된 제약 조건을 위반하는지 여부에 신경 쓰지 않습니다. 그러나 플래너는 주의를 기울이고 선언된 제약 조건을 충족하지 않는 외부 테이블에 표시되는 행이 있는 경우 쿼리를 잘못 최적화할 수 있습니다. 사용자가 제약 조건이 true여야 한다고 선언했을 때 제약 조건을 위반하면 오류를 발생시키는 것이 적절할 수 있습니다(데이터 유형이 일치하지 않는 경우에 수행해야 하는 것과 마찬가지로).

공허
ReScanForeignScan(ForeignScanState *node);

스캔을 처음부터 다시 시작하십시오. 스캔이 의존하는 매개변수의 값이 변경되었을 수 있으므로 새 스캔이 반드시 정확히 동일한 행을 반환하는 것은 아닙니다.

무효
EndForeignScan(ForeignScanState *node);

스캔을 종료하고 자원을 해제합니다. 일반적으로 palloc 메모리를 해제하는 것은 중요하지 않지만, 예를 들어 열려 있는 파일과 원격 서버에 대한 연결을 정리해야 합니다.

57.2.2. 사설 토토 사이트 조인 검색을 위한 FDW 루틴

FDW가 원격으로 외부 조인 수행을 지원하는 경우(두 테이블의 데이터를 가져와 로컬로 조인을 수행하는 대신) 다음 콜백 함수를 제공해야 합니다.

공허
GetForeignJoinPaths(PlannerInfo *root,
                    RelOptInfo *joinrel,
                    RelOptInfo *외부,
                    RelOptInfo *innerrel,
                    JoinType 조인 유형,
                    JoinPathExtraData *추가);

모두 동일한 사설 토토 사이트 서버에 속하는 두 개 이상의 사설 토토 사이트 테이블 조인을 위한 가능한 액세스 경로를 생성하십시오. 이 선택적 함수는 쿼리 계획 중에 호출됩니다. 마찬가지로GetForeignPaths, 이 함수는 다음을 생성해야 합니다.사설 토토 사이트경로제공된 경로조인렐(사용create_foreign_join_path빌드)하고 호출추가_경로조인을 위해 고려되는 경로 세트에 이러한 경로를 추가합니다. 그러나 달리GetForeignPaths, 로컬 조인과 관련된 경로는 항상 가능하므로 이 함수가 하나 이상의 경로를 만드는 데 성공할 필요는 없습니다.

이 함수는 내부 및 사설 토토 사이트 관계의 다양한 조합으로 동일한 조인 관계에 대해 반복적으로 호출됩니다. 중복된 작업을 최소화하는 것은 FDW의 책임입니다.

만약에ForeignPath경로가 조인을 위해 선택되면 전체 조인 프로세스를 나타냅니다. 구성 요소 테이블 및 보조 조인에 대해 생성된 경로는 사용되지 않습니다. 조인 경로의 후속 처리는 단일 외부 테이블을 검색하는 경로에서와 마찬가지로 진행됩니다. 한 가지 차이점은 다음과 같습니다.scanrelid결과 중ForeignScan계획 노드는 나타내는 단일 관계가 없으므로 0으로 설정되어야 합니다. 대신에fs_relids필드ForeignScan노드는 결합된 관계 집합을 나타냅니다. (후자의 필드는 코어 플래너 코드에 의해 자동으로 설정되며 FDW에 의해 채워질 필요가 없습니다.) 또 다른 차이점은 원격 조인에 대한 열 목록을 시스템 카탈로그에서 찾을 수 없기 때문에 FDW가 채워야 한다는 것입니다.fdw_scan_tlist적절한 목록 포함대상 항목노드, 반환하는 튜플에서 런타임에 제공할 열 집합을 나타냅니다.

참조PostgreSQL : 문서 : 14 : 57.4. 외국 데이터 포장 쿼리 토토 캔추가 정보를 확인하세요.

57.2.3. 사후 스캔/결합 처리 계획을 위한 FDW 루틴

FDW가 원격 집계와 같은 원격 사후 스캔/조인 처리 수행을 지원하는 경우 다음 콜백 기능을 제공해야 합니다.

공허
GetForeignUpperPaths(PlannerInfo *root,
                     UpperRelationKind 단계,
                     RelOptInfo *input_rel,
                     RelOptInfo *output_rel,
                     무효 *추가);

다음에 대한 가능한 액세스 경로 생성상위 관계처리: 집계, 창 기능, 정렬 및 테이블 업데이트와 같은 모든 스캔 후/조인 쿼리 처리에 대한 플래너의 용어입니다. 이 선택적 함수는 쿼리 계획 중에 호출됩니다. 현재는 쿼리에 포함된 모든 기본 관계가 동일한 FDW에 속하는 경우에만 호출됩니다. 이 함수는 생성되어야 합니다.ForeignPathFDW가 원격으로 수행하는 방법을 알고 있는 사후 스캔/조인 처리에 대한 경로(사용create_foreign_upper_path빌드)하고 호출add_path이 경로를 표시된 상위 관계에 추가합니다. 마찬가지로GetForeignJoinPaths, 로컬 처리와 관련된 경로는 항상 가능하므로 이 함수가 경로 생성에 성공할 필요는 없습니다.

단계매개변수는 현재 고려 중인 사후 스캔/조인 단계를 식별합니다.output_rel은 이 단계의 계산을 나타내는 경로를 수신해야 하는 상위 관계이며input_rel은 이 단계에 대한 입력을 나타내는 관계입니다. 그만큼추가매개변수는 추가 세부정보를 제공하며 현재는UPPERREL_PARTIAL_GROUP_AGG또는UPPERREL_GROUP_AGG, 이 경우 a를 가리킵니다.GroupPathExtraData구조; 또는UPPERREL_FINAL, 이 경우 a를 가리킵니다.최종경로추가데이터구조. (참고하세요ForeignPath경로가 추가됨output_rel일반적으로 경로에 직접적으로 종속되지 않습니다.input_rel, 처리가 외부에서 수행될 것으로 예상되기 때문입니다. 그러나 이전 처리 단계에서 이전에 생성된 경로를 검사하는 것은 중복 계획 작업을 피하는 데 유용할 수 있습니다.)

참조PostgreSQL : 문서 : 14 : 57.4. 외국 데이터 포장 쿼리 토토 캔추가 정보를 확인하세요.

57.2.4. 사설 토토 사이트 테이블 업데이트를 위한 FDW 루틴

FDW가 쓰기 가능한 외부 테이블을 지원하는 경우 FDW의 필요와 기능에 따라 다음 콜백 함수 중 일부 또는 전부를 제공해야 합니다.

공허
AddForeignUpdateTargets(PlannerInfo *root,
                        인덱스 rtindex,
                        RangeTblEntry *target_rte,
                        관계 target_relation);

업데이트그리고삭제작업은 테이블 검색 기능으로 이전에 가져온 행에 대해 수행됩니다. FDW에는 업데이트하거나 삭제할 정확한 행을 식별할 수 있도록 행 ID 또는 기본 키 열 값과 같은 추가 정보가 필요할 수 있습니다. 이를 지원하기 위해 이 함수는 숨겨진 항목을 추가할 수 있습니다. 또는정크, 대상 열을 사설 토토 사이트 테이블에서 검색할 열 목록으로 지정합니다.업데이트또는삭제.

그렇게 하려면, 다음을 구성하십시오.바르필요한 추가 값을 나타내고 이를 전달add_row_identity_var, 정크 열의 이름과 함께. (여러 개의 열이 필요한 경우 이 작업을 두 번 이상 수행할 수 있습니다.) 각각에 대해 고유한 정크 열 이름을 선택해야 합니다.바르필요합니다. 단, 그 외에는바르s는 다음을 제외하고는 동일합니다.바르노필드는 열 이름을 공유할 수 있으며 공유해야 합니다. 핵심 시스템은 정크 열 이름을 사용합니다.테이블로이드테이블용테이블로이드열,ctid또는ctidNforctid, 전체전체 행의 경우바르다음으로 표시됨vartype = 기록전체N전체 행의 경우바르변형테이블의 선언된 행 유형과 같습니다. 가능하면 이러한 이름을 다시 사용하십시오(플래너는 동일한 정크 열에 대한 중복 요청을 결합합니다). 이 외에 다른 종류의 정크 열이 필요한 경우 다른 FDW와의 충돌을 피하기 위해 확장명 이름이 접두어로 붙은 이름을 선택하는 것이 현명할 수 있습니다.

만약에AddForeignUpdateTargets포인터가 다음으로 설정되었습니다.NULL, 추가 대상 표현식이 추가되지 않습니다. (이렇게 하면 구현이 불가능해집니다.삭제그러나 작업은업데이트FDW가 행을 식별하기 위해 변경되지 않는 기본 키를 사용하는 경우 여전히 가능할 수 있습니다.)

목록 *
PlanForeignModify(PlannerInfo *root,
                  ModifyTable *계획,
                  색인 결과관계,
                  int subplan_index);

외부 테이블의 삽입, 업데이트 또는 삭제에 필요한 추가 계획 작업을 수행합니다. 이 함수는 다음에 첨부될 FDW 개인 정보를 생성합니다.테이블 수정업데이트 작업을 수행하는 계획 노드입니다. 이 개인 정보는 다음과 같은 형식이어야 합니다.목록, 다음 주소로 전달됩니다.BeginForeignModify실행 단계 중.

루트은 쿼리에 대한 플래너의 전역 정보입니다.계획이것은테이블 수정다음을 제외하고 완전한 계획 노드fdwPrivLists필드.결과관계범위 테이블 색인으로 대상 사설 토토 사이트 테이블을 식별합니다.하위 계획_index어떤 대상을 식별테이블 수정계획 노드는 0부터 계산됩니다. 의 대상 관계별 하위 구조에 대한 색인을 생성하려면 이것을 사용하십시오.계획노드.

참조PostgreSQL : 문서 : 14 : 57.4. 외국 데이터 포장 쿼리 토토 캔추가 정보를 확인하세요.

만약에PlanForeign수정포인터가 다음으로 설정되었습니다.NULL, 계획 시 추가 작업이 수행되지 않으며fdw_private목록 전달 대상BeginForeignModifyNIL이 됩니다.

공허
BeginForeignModify(ModifyTableState *mtstate,
                   ResultRelInfo *rinfo,
                   *fdw_private 목록,
                   int 하위 계획_색인,
                   int 플래그);

외부 테이블 수정 작업 실행을 시작합니다. 이 루틴은 실행기 시작 중에 호출됩니다. 실제 테이블 수정 전에 필요한 초기화를 수행해야 합니다. 이어서,ExecForeignInsert/ExecForeignBatchInsert, ExecForeignUpdate또는ExecForeignDelete튜플을 삽입, 업데이트 또는 삭제하기 위해 호출됩니다.

mtstate전체적인 상태입니다테이블 수정계획 노드가 실행 중입니다. 계획 및 실행 상태에 대한 전역 데이터는 이 구조를 통해 사용할 수 있습니다.rinfo이것은결과RelInfo대상 외부 테이블을 설명하는 구조체입니다. (그ri_FdwState필드결과RelInfoFDW가 이 작업에 필요한 개인 상태를 저장하는 데 사용할 수 있습니다.)fdw_private다음에 의해 생성된 개인 데이터를 포함합니다.PlanForeign수정(있는 경우).하위 계획_index어떤 대상을 식별테이블 수정이것은 계획 노드입니다.플래그이 계획 노드에 대한 실행기의 작동 모드를 설명하는 플래그 비트를 포함합니다.

그때를 기억하세요(플래그 및 EXEC_FLAG_EXPLAIN_ONLY)이 true입니다. 이 함수는 사설 토토 사이트에 표시되는 작업을 수행해서는 안 됩니다. 노드 상태를 유효하게 만드는 데 필요한 최소한의 작업만 수행해야 합니다.ExplainForeignModify그리고EndForeignModify.

만약에BeginForeignModify포인터가 다음으로 설정되었습니다.NULL, 실행기 시작 중에는 아무런 조치도 취하지 않습니다.

TupleTableSlot *
ExecForeignInsert(EState *부동산,
                  ResultRelInfo *rinfo,
                  TupleTableSlot *슬롯,
                  TupleTableSlot *planSlot);

사설 토토 사이트 테이블에 하나의 튜플을 삽입하십시오.부동산쿼리의 전역 실행 상태입니다.rinfo이것은결과RelInfo대상 외부 테이블을 설명하는 구조체.슬롯삽입할 튜플을 포함합니다. 이는 사설 토토 사이트 테이블의 행 유형 정의와 일치합니다.planSlot다음에 의해 생성된 튜플을 포함합니다.테이블 수정계획 노드의 하위 계획; 와는 다르다슬롯추가 내용이 포함될 수 있음정크열. (그계획 슬롯일반적으로 별 관심이 없습니다.삽입사례이지만 완전성을 위해 제공됩니다.)

반환 값은 실제로 삽입된 데이터가 포함된 슬롯이거나(트리거 작업의 결과로 제공된 데이터와 다를 수 있음) 실제로 행이 삽입되지 않은 경우(일반적으로 트리거의 결과로) NULL입니다. 전달된슬롯이 목적으로 재사용할 수 있습니다.

반환된 슬롯의 데이터는 다음과 같은 경우에만 사용됩니다.삽입문에는가 있습니다돌아오는 중절 또는 뷰와 관련됨체크 옵션 포함; 또는 외국 테이블에행 이후트리거. 트리거에는 모든 열이 필요하지만 FDW는 내용에 따라 일부 또는 전체 열을 반환하지 않도록 최적화하도록 선택할 수 있습니다.돌아오는 중절 또는체크 옵션 포함제약. 그럼에도 불구하고 성공을 나타내려면 일부 슬롯을 반환해야 합니다. 그렇지 않으면 쿼리의 보고된 행 수가 잘못됩니다.

만약에ExecForeignInsert포인터가 다음으로 설정되었습니다.NULL, 외부 테이블에 삽입하려는 시도는 오류 메시지와 함께 실패합니다.

이 함수는 라우팅된 튜플을 외부 테이블 파티션에 삽입하거나 실행할 때도 호출됩니다.복사본:사설 토토 사이트 테이블에서, 이 경우에는 테이블에서와 다른 방식으로 호출됩니다.삽입케이스. FDW가 이를 지원할 수 있도록 아래 설명된 콜백 함수를 참조하세요.

TupleTableSlot **
ExecForeignBatchInsert(EState *부동산,
                       ResultRelInfo *rinfo,
                       TupleTableSlot **슬롯,
                       TupleTableSlot **planSlots,
                       int *numSlots);

여러 개의 튜플을 외부 테이블에 대량으로 삽입하십시오. 매개변수는 동일합니다.ExecForeignInsert제외슬롯그리고계획 슬롯여러 튜플을 포함하고*numSlots해당 배열의 튜플 수를 지정합니다.

반환 값은 실제로 삽입된 데이터를 포함하는 슬롯 배열입니다(예를 들어 트리거 작업의 결과로 제공된 데이터와 다를 수 있습니다.)슬롯이 목적으로 재사용될 수 있습니다. 성공적으로 삽입된 튜플의 수가 반환됩니다.*numSlots.

반환된 슬롯의 데이터는 다음과 같은 경우에만 사용됩니다.삽입문에 뷰가 포함됨체크 옵션 포함; 또는 외국 테이블에행 이후트리거. 트리거에는 모든 열이 필요하지만 FDW는 내용에 따라 일부 또는 전체 열을 반환하지 않도록 최적화하도록 선택할 수 있습니다.체크 옵션 포함제약.

만약에ExecForeignBatchInsert또는GetForeignModifyBatchSize포인터가 다음으로 설정되었습니다.NULL, 외부 테이블에 삽입하려는 시도는 다음을 사용합니다.ExecForeignInsert. 이 함수는 다음과 같은 경우에는 사용되지 않습니다.삽입돌아오는 중절.

이 함수는 라우팅된 튜플을 외부 테이블 파티션에 삽입할 때도 호출된다는 점에 유의하세요. FDW가 이를 지원할 수 있도록 아래 설명된 콜백 함수를 참조하세요.

정수
GetForeignModifyBatchSize(ResultRelInfo *rinfo);

단일 튜플의 최대 수를 보고ExecForeignBatchInsert호출은 지정된 외부 테이블을 처리할 수 있습니다. 실행자는 최대 주어진 수의 튜플을 다음으로 전달합니다.ExecForeignBatchInsert. rinfo이것은결과RelInfo대상 외부 테이블을 설명하는 구조체입니다. FDW는 사용자가 이 값 또는 일부 하드 코딩된 값을 설정할 수 있도록 외부 서버 및/또는 외부 테이블 옵션을 제공할 것으로 예상됩니다.

만약에ExecForeignBatchInsert또는GetForeignModifyBatchSize포인터가 다음으로 설정되었습니다.NULL, 외부 테이블에 삽입하려고 시도하면 다음이 사용됩니다.ExecForeignInsert.

TupleTableSlot *
ExecForeignUpdate(EState *estate,
                  ResultRelInfo *rinfo,
                  TupleTableSlot *슬롯,
                  TupleTableSlot *planSlot);

외부 테이블에서 하나의 튜플을 업데이트합니다.부동산쿼리의 전역 실행 상태입니다.rinfo이것은결과RelInfo대상 외부 테이블을 설명하는 구조체.슬롯튜플에 대한 새 데이터가 포함되어 있습니다. 이는 사설 토토 사이트 테이블의 행 유형 정의와 일치합니다.planSlot에 의해 생성된 튜플을 포함합니다.테이블 수정계획 노드의 하위 계획입니다. 달리슬롯, 이 튜플에는 쿼리에 의해 변경된 열의 새 값만 포함되어 있으므로 색인을 생성할 사설 토토 사이트 테이블의 속성 번호에 의존하지 마세요.planSlot. 또한,planSlot일반적으로 추가 내용을 포함정크열. 특히 다음에서 요청한 모든 정크 열은AddForeignUpdateTargets이 슬롯에서 사용할 수 있습니다.

반환 값은 실제로 업데이트된 행을 포함하는 슬롯이거나(트리거 작업의 결과로 제공된 데이터와 다를 수 있음) 실제로 업데이트된 행이 없는 경우(일반적으로 트리거의 결과로) NULL입니다. 전달된슬롯이 목적으로 재사용할 수 있습니다.

반환된 슬롯의 데이터는 다음 경우에만 사용됩니다.업데이트문에는가 있습니다돌아오는 중절 또는 뷰 포함체크 옵션 있음; 또는 외국 테이블에행 이후트리거. 트리거에는 모든 열이 필요하지만 FDW는 내용에 따라 일부 또는 전체 열을 반환하지 않도록 최적화하도록 선택할 수 있습니다.돌아오는 중절 또는체크 옵션 있음제약조건. 그럼에도 불구하고 성공을 나타내려면 일부 슬롯을 반환해야 합니다. 그렇지 않으면 쿼리의 보고된 행 수가 잘못됩니다.

만약에ExecForeignUpdate포인터가 다음으로 설정되었습니다.NULL, 외부 테이블을 업데이트하려는 시도는 오류 메시지와 함께 실패합니다.

TupleTableSlot *
ExecForeignDelete(EState *부동산,
                  ResultRelInfo *rinfo,
                  TupleTableSlot *슬롯,
                  TupleTableSlot *planSlot);

외부 테이블에서 하나의 튜플을 삭제하세요.부동산쿼리의 전역 실행 상태입니다.rinfo이것은결과RelInfo대상 외부 테이블을 설명하는 구조체.슬롯호출 시 유용한 내용은 없지만 반환된 튜플을 보관하는 데 사용할 수 있습니다.planSlot에 의해 생성된 튜플을 포함합니다.테이블 수정계획 노드의 하위 계획; 특히, 다음에서 요청한 정크 열을 전달합니다.AddForeignUpdateTargets. 삭제할 튜플을 식별하려면 정크 열을 사용해야 합니다.

반환 값은 삭제된 행이 포함된 슬롯이거나 삭제된 행이 없는 경우(일반적으로 트리거의 결과) NULL입니다. 전달된슬롯반환될 튜플을 보관하는 데 사용할 수 있습니다.

반환된 슬롯의 데이터는 다음과 같은 경우에만 사용됩니다.삭제쿼리에 다음이 있습니다.돌아오는 중절 또는 외부 테이블에행 이후트리거. 트리거에는 모든 열이 필요하지만 FDW는 내용에 따라 일부 또는 전체 열을 반환하지 않도록 최적화하도록 선택할 수 있습니다.돌아오는 중절. 그럼에도 불구하고 성공을 나타내려면 일부 슬롯을 반환해야 합니다. 그렇지 않으면 쿼리의 보고된 행 수가 잘못됩니다.

만일ExecForeignDelete포인터가 다음으로 설정되었습니다.NULL, 외부 테이블에서 삭제하려는 시도는 오류 메시지와 함께 실패합니다.

공허
EndForeignModify(EState *부동산,
                 ResultRelInfo *rinfo);

테이블 업데이트를 종료하고 리소스를 해제합니다. 일반적으로 palloc 메모리를 해제하는 것은 중요하지 않지만, 예를 들어 열려 있는 파일과 원격 서버에 대한 연결을 정리해야 합니다.

만약에EndForeignModify포인터가 다음으로 설정되었습니다.NULL, 실행기 종료 중에는 아무런 조치도 취하지 않습니다.

다음에 의해 분할된 테이블에 삽입된 튜플삽입또는다음에서 복사파티션으로 라우팅됩니다. FDW가 라우팅 가능한 외부 테이블 파티션을 지원하는 경우 다음 콜백 함수도 제공해야 합니다. 이 함수는 다음과 같은 경우에도 호출됩니다.복사본:사설 토토 사이트 테이블에서 실행됩니다.

공허
BeginForeignInsert(ModifyTableState *mtstate,
                   ResultRelInfo *rinfo);

외부 테이블에서 삽입 작업 실행을 시작합니다. 이 루틴은 튜플 라우팅을 위해 선택된 파티션이고 a에 지정된 대상인 두 경우 모두 첫 번째 튜플이 외부 테이블에 삽입되기 직전에 호출됩니다.다음에서 복사명령. 실제 삽입 전에 필요한 초기화를 수행해야 합니다. 이어서,ExecForeignInsert또는ExecForeignBatchInsert튜플이 외부 테이블에 삽입되도록 호출됩니다.

mtstate전체적인 상태입니다테이블 수정계획 노드가 실행 중입니다. 계획 및 실행 상태에 대한 전역 데이터는 이 구조를 통해 사용할 수 있습니다.린포이것은ResultRelInfo대상 외부 테이블을 설명하는 구조체입니다. (그ri_FdwState필드결과RelInfoFDW가 이 작업에 필요한 비공개 상태를 저장하는 데 사용할 수 있습니다.)

이것이 a에 의해 호출될 때다음에서 복사명령, 계획 관련 전역 데이터mtstate제공되지 않으며planSlot매개변수ExecForeignInsert삽입된 각 튜플에 대해 이후에 호출되는 것은NULL, 외부 테이블이 튜플 라우팅을 위해 선택된 파티션인지 아니면 명령에 지정된 대상인지 여부.

만약BeginForeignInsert포인터가 다음으로 설정되었습니다.NULL, 초기화를 위한 조치가 취해지지 않습니다.

FDW가 라우팅 가능한 외부 테이블 파티션 및/또는 실행을 지원하지 않는 경우 참고복사본:외부 테이블에서는 이 함수 또는ExecForeignInsert/ExecForeignBatchInsert이후에 호출되면 필요에 따라 오류가 발생해야 합니다.

공허
EndForeignInsert(EState *부동산,
                 ResultRelInfo *rinfo);

삽입 작업을 종료하고 자원을 해제합니다. 일반적으로 palloc 메모리를 해제하는 것은 중요하지 않지만, 예를 들어 열려 있는 파일과 원격 서버에 대한 연결을 정리해야 합니다.

만약에EndForeignInsert포인터가 다음으로 설정되었습니다.NULL, 종료를 위한 어떠한 조치도 취하지 않습니다.

정수
IsForeignRelUpdatable(관계 관계);

지정된 외부 테이블이 지원하는 업데이트 작업을 보고합니다. 반환 값은를 사용하여 외부 테이블에서 지원되는 작업을 나타내는 규칙 이벤트 번호의 비트 마스크여야 합니다.명령 유형열거; 즉,(1 << CMD_UPDATE) = 4for업데이트, (1 << CMD_INSERT) = 8for삽입(1 << CMD_DELETE) = 16for삭제.

만약에IsForeignRelUpdatable포인터가 다음으로 설정되었습니다.NULL, FDW가 제공하는 경우 외부 테이블은 삽입 가능, 업데이트 가능 또는 삭제 가능하다고 가정됩니다.ExecForeignInsert, ExecForeignUpdate또는ExecForeignDelete각각. 이 기능은 FDW가 업데이트 가능한 테이블과 그렇지 않은 테이블을 지원하는 경우에만 필요합니다. (그럼에도 이 함수를 체크인하는 대신 실행 루틴에서 오류를 발생시키는 것이 허용됩니다. 그러나 이 함수는 표시할 업데이트 가능성을 결정하는 데 사용됩니다.정보_스키마조회.)

외부 테이블에 대한 일부 삽입, 업데이트 및 삭제는 대체 인터페이스 세트를 구현하여 최적화할 수 있습니다. 삽입, 업데이트 및 삭제를 위한 일반 인터페이스는 원격 서버에서 행을 가져온 다음 해당 행을 한 번에 하나씩 수정합니다. 경우에 따라 이 행별 접근 방식이 필요하지만 비효율적일 수 있습니다. 외부 서버가 실제로 검색하지 않고도 어떤 행을 수정해야 하는지 결정할 수 있고 작업에 영향을 줄 수 있는 로컬 구조(행 수준 로컬 트리거, 저장된 생성 열 또는체크 옵션 포함상위 뷰의 제약), 전체 작업이 원격 서버에서 수행되도록 배열하는 것이 가능합니다. 아래에 설명된 인터페이스가 이를 가능하게 합니다.

부울
PlanDirectModify(PlannerInfo *루트,
                 ModifyTable *계획,
                 색인 결과관계,
                 int subplan_index);

원격 서버에서 직접 수정을 실행하는 것이 안전한지 결정하십시오. 그렇다면 돌아가세요.필요한 계획 작업을 수행한 후. 그렇지 않으면 반환거짓. 이 선택적 함수는 쿼리 계획 중에 호출됩니다. 이 함수가 성공하면,BeginDirectModify, IterateDirectModify그리고EndDirectModify49546_49735PlanForeign수정.

원격 서버에서 직접 수정을 실행하려면 이 함수는 다음을 사용하여 대상 하위 계획을 다시 작성해야 합니다.ForeignScan원격 서버에서 직접 수정을 실행하는 계획 노드입니다.작동그리고결과관계필드ForeignScan적절하게 설정되어야 합니다.작동다음으로 설정되어야 합니다.명령 유형문 종류에 해당하는 열거형(즉,CMD_UPDATEfor업데이트, CMD_INSERTfor삽입CMD_DELETEfor삭제) 및결과관계인수는 다음 위치에 복사되어야 합니다.결과관계필드.

참조PostgreSQL : 문서 : 14 : 57.4. 외국 데이터 포장 쿼리 토토 캔추가 정보를 확인하세요.

만약에PlanDirectModify포인터가 다음으로 설정되었습니다.NULL, 원격 서버에서 직접 수정을 실행하려는 시도는 수행되지 않습니다.

공허
BeginDirectModify(ForeignScanState *노드,
                  int 플래그);

원격 서버에서 직접 수정을 실행할 준비를 하십시오. 이는 실행기 시작 중에 호출됩니다. 직접 수정하기 전에 필요한 초기화를 수행해야 합니다(첫 번째 호출 시 수행되어야 함).IterateDirectModify).ForeignScanState노드가 이미 생성되었지만, 그fdw_state필드가 여전히 NULL입니다. 수정할 테이블에 대한 정보는를 통해 액세스할 수 있습니다.ForeignScanState노드(특히, 기본에서ForeignScan에서 제공한 FDW 개인 정보가 포함된 계획 노드PlanDirectModify). 플래그이 계획 노드에 대한 실행기의 작동 모드를 설명하는 플래그 비트를 포함합니다.

언제든지 주의하세요(플래그 및 EXEC_FLAG_EXPLAIN_ONLY)이 true입니다. 이 함수는 사설 토토 사이트에 표시되는 작업을 수행해서는 안 됩니다. 노드 상태를 유효하게 만드는 데 필요한 최소한의 작업만 수행해야 합니다.ExplainDirectModify그리고EndDirectModify.

만약에BeginDirectModify포인터가 다음으로 설정되었습니다.NULL, 원격 서버에서 직접 수정을 실행하려는 시도는 수행되지 않습니다.

TupleTableSlot *
IterateDirectModify(ForeignScanState *node);

삽입, 업데이트또는삭제쿼리에 a가 없습니다돌아오는 중절, 원격 서버에서 직접 수정한 후 NULL을 반환하면 됩니다. 쿼리에 절이 있는 경우,에 필요한 데이터가 포함된 결과 하나를 가져옵니다.돌아오는 중계산, 튜플 테이블 슬롯(노드의ScanTupleSlot이 목적으로 사용되어야 합니다). 실제로 삽입, 업데이트 또는 삭제된 데이터는에 저장되어야 합니다.노드-resultRelInfo-ri_projectReturning-pi_exprContext-ecxt_scantuple. 더 이상 사용할 수 있는 행이 없으면 NULL을 반환합니다. 이는 호출 간에 재설정되는 단기 메모리 컨텍스트에서 호출됩니다. 에서 메모리 컨텍스트를 생성합니다.BeginDirectModify더 오래 지속되는 저장 공간이 필요하거나 다음을 사용하는 경우es_query_cxt노드의EState.

반환된 행은 다음과 일치해야 합니다.fdw_scan_tlist대상 목록이 제공된 경우, 그렇지 않은 경우 업데이트되는 외부 테이블의 행 유형과 일치해야 합니다. 필요하지 않은 가져오기 열을 최적화하기로 선택한 경우돌아오는 중계산, 해당 열 위치에 null을 삽입해야 합니다. 그렇지 않으면 다음을 생성해야 합니다.fdw_scan_tlist해당 열이 생략된 목록입니다.

쿼리에 절이 있든 없든, 쿼리의 보고된 행 수는 FDW 자체에 의해 증가되어야 합니다. 쿼리에 절이 없으면 FDW는 또한에 대한 행 수를 늘려야 합니다.ForeignScanState노드 in the분석 설명사례.

만약에IterateDirectModify포인터가 다음으로 설정되었습니다.NULL, 원격 서버에서 직접 수정을 실행하려는 시도는 수행되지 않습니다.

공허
EndDirectModify(ForeignScanState *node);

원격 서버에서 직접 수정한 후 정리합니다. 일반적으로 palloc 메모리를 해제하는 것은 중요하지 않지만, 예를 들어 열려 있는 파일과 원격 서버에 대한 연결을 정리해야 합니다.

만약에EndDirectModify포인터가 다음으로 설정되었습니다.NULL, 원격 서버에서 직접 수정을 실행하려는 시도는 수행되지 않습니다.

57.2.5. FDW 루틴:잘라내기

공허
ExecForeignTruncate(*rel 목록,
                    DropBehavior 동작,
                    bool restart_seqs);

외부 테이블을 자릅니다. 이 함수는 다음과 같은 경우에 호출됩니다.잘라내기사설 토토 사이트 테이블에서 실행됩니다.rels다음 목록입니다관계잘라낼 사설 토토 사이트 테이블의 데이터 구조.

행동둘 중 하나입니다DROP_RESTRICT또는DROP_CASCADE다음을 나타냄제한또는캐스케이드옵션이 원본에서 요청되었습니다잘라내기각각 명령을 실행합니다.

만약restart_seqsis, 원본잘라내기명령이 요청한재시작 ID행동, 그렇지 않으면계속 ID동작이 요청되었습니다.

참고:원본에 지정된 옵션잘라내기명령이 전달되지 않았습니다.ExecForeignTruncate. 이 동작은의 콜백 함수와 유사합니다.선택, 업데이트그리고삭제사설 토토 사이트 테이블에.

ExecForeignTruncate은 사설 토토 사이트 테이블이 잘릴 사설 토토 사이트 서버당 한 번씩 호출됩니다. 이는 모든 사설 토토 사이트 테이블이에 포함되어 있음을 의미합니다.rels동일한 서버에 속해야 합니다.

만약에ExecForeignTruncate포인터가 다음으로 설정되었습니다.NULL, 사설 토토 사이트 테이블을 자르려는 시도는 오류 메시지와 함께 실패합니다.

57.2.6. 행 잠금을 위한 FDW 루틴

FDW가 지원을 원하는 경우늦은 행 잠금(설명에 따름)PostgreSQL : 문서 : 14 : 57.5. 외국 데이터 포장지에서의 행 스포츠 토토 사이트), 다음 콜백 함수를 제공해야 합니다.

RowMarkType
GetForeignRowMarkType(RangeTblEntry *rte,
                      LockClauseStrength 강도);

사설 토토 사이트 테이블에 사용할 행 표시 옵션을 보고합니다.rte이것은범위Tbl항목테이블의 노드 및해당 항목에서 요청한 잠금 강도를 설명합니다.업데이트/공유용절(있는 경우). 결과는 다음의 멤버여야 합니다.RowMarkType열거형 유형.

이 함수는 다음에 나타나는 각 외부 테이블에 대한 쿼리 계획 중에 호출됩니다.업데이트, 삭제또는업데이트/공유 선택쿼리이며 대상이 아닙니다.업데이트또는삭제.

만약GetForeignRowMarkType포인터가 다음으로 설정되었습니다.NULL, 그ROW_MARK_COPY옵션이 항상 사용됩니다. (이것은 다음을 의미합니다.RefetchForeignRow절대 호출되지 않으므로 제공할 필요도 없습니다.)

참조PostgreSQL : 문서 : 14 : 57.5. 외국 데이터 포장지에서의 행 스포츠 토토 사이트더 많은 정보를 원하시면.

공허
RefetchForeignRow(EState *부동산,
                  ExecRowMark *erm,
                  데이텀 로우이드,
                  TupleTableSlot *슬롯,
                  bool *업데이트됨);

필요한 경우 잠긴 후 외부 테이블에서 하나의 튜플 슬롯을 다시 가져옵니다.부동산쿼리의 전역 실행 상태입니다.erm이것이ExecRowMark대상 외부 테이블과 획득할 행 잠금 유형(있는 경우)을 설명하는 구조체.로우이드가져올 튜플을 식별합니다.슬롯호출 시 유용한 내용은 없지만 반환된 튜플을 보관하는 데 사용할 수 있습니다.업데이트됨은 출력 매개변수입니다.

이 함수는 튜플을 제공된 슬롯에 저장하거나 행 잠금을 얻을 수 없는 경우 이를 지워야 합니다. 획득할 행 잠금 유형은 다음과 같이 정의됩니다.erm-markType, 이는 이전에에서 반환된 값입니다.GetForeignRowMarkType. (ROW_MARK_REFERENCE잠금을 획득하지 않고 튜플을 다시 가져오는 것을 의미하며ROW_MARK_COPY이 루틴에서는 절대 볼 수 없습니다.)

또한,*업데이트됨다음으로 설정되어야 함가져온 것이 이전에 얻은 것과 동일한 버전이 아니라 업데이트된 버전의 튜플인 경우. (FDW가 이에 대해 확신할 수 없는 경우 항상 반환권장됩니다.)

기본적으로 행 잠금 획득에 실패하면 오류가 발생한다는 점에 유의하세요. 빈 슬롯으로 반환하는 것은 다음과 같은 경우에만 적합합니다.건너뛰기 잠김옵션은 다음으로 지정됩니다.erm-waitPolicy.

로우이드이것은ctid다시 가져올 행에 대해 이전에 읽은 값입니다. 비록로우이드값은 다음으로 전달됩니다.데이텀, 현재는 a만 가능합니다.tid. 함수 API는 향후 행 ID에 대해 다른 데이터 유형을 허용할 수 있기를 바라면서 선택되었습니다.

만약에RefetchForeignRow포인터가 다음으로 설정되었습니다.NULL, 행을 다시 가져오려는 시도는 오류 메시지와 함께 실패합니다.

참조PostgreSQL : 문서 : 14 : 57.5. 외국 데이터 포장지에서의 행 스포츠 토토 사이트더 많은 정보를 원하시면.

부울
RecheckForeignScan(ForeignScanState *노드,
                   TupleTableSlot *슬롯);

이전에 반환된 튜플이 관련 스캔 및 조인 한정자와 여전히 일치하는지 다시 확인하고 수정된 튜플 버전을 제공할 수도 있습니다. 조인 푸시다운을 수행하지 않는 외부 데이터 래퍼의 경우 일반적으로 이를 다음과 같이 설정하는 것이 더 편리합니다.NULL대신 설정fdw_recheck_quals적절하게. 그러나 외부 조인이 푸시다운되면 필요한 속성이 모두 존재하더라도 모든 기본 테이블과 관련된 검사를 결과 튜플에 다시 적용하는 것만으로는 충분하지 않습니다. 왜냐하면 일부 한정자와 일치하지 않으면 튜플이 반환되지 않고 일부 속성이 NULL이 될 수 있기 때문입니다.RecheckForeignScan한정자를 다시 확인하고 여전히 만족하면 true를 반환하고 그렇지 않으면 false를 반환할 수 있지만 제공된 슬롯에 대체 튜플을 저장할 수도 있습니다.

조인 푸시다운을 구현하기 위해 외부 데이터 래퍼는 일반적으로 재확인에만 사용되는 대체 로컬 조인 계획을 구성합니다. 이는의 외부 하위 계획이 됩니다.ForeignScan. 재검사가 필요한 경우 이 하위 계획을 실행할 수 있으며 결과 튜플을 슬롯에 저장할 수 있습니다. 기본 테이블이 두 개 이상의 행을 반환하지 않으므로 이 계획은 효율적일 필요가 없습니다. 예를 들어 모든 조인을 중첩 루프로 구현할 수 있습니다. 함수GetExistingLocalJoinPath대체 로컬 조인 계획으로 사용할 수 있는 적합한 로컬 조인 경로에 대한 기존 경로를 검색하는 데 사용될 수 있습니다.GetExistingLocalJoinPath지정된 조인 관계의 경로 목록에서 매개변수화되지 않은 경로를 검색합니다. (이러한 경로를 찾지 못하면 NULL을 반환합니다. 이 경우 외부 데이터 래퍼는 자체적으로 로컬 경로를 구축하거나 해당 조인에 대한 액세스 경로를 생성하지 않도록 선택할 수 있습니다.)

57.2.7. FDW 루틴:설명

공허
explainForeignScan(ForeignScanState *노드,
                   explainState *es);

추가 인쇄설명사설 토토 사이트 테이블 스캔에 대한 출력입니다. 이 함수는 호출할 수 있습니다.ExplainPropertyText및 필드를 추가하는 관련 함수설명출력. 플래그 필드는es인쇄할 내용과 상태를 결정하는 데 사용할 수 있습니다.ForeignScanState노드를 검사하여 다음에서 런타임 통계를 제공할 수 있습니다.분석 설명사례.

만약에ExplainForeignScan포인터가 다음으로 설정되었습니다.NULL, 동안에는 추가 정보가 인쇄되지 않습니다.설명.

공허
explainForeignModify(ModifyTableState *mtstate,
                     ResultRelInfo *rinfo,
                     *fdw_private 목록,
                     int 하위 계획_색인,
                     구조체 explainState *es);

추가 인쇄설명외부 테이블 업데이트에 대한 출력입니다. 이 함수는 호출할 수 있습니다.ExplainPropertyText및 필드를 추가하는 관련 함수설명출력. 플래그 필드는es인쇄할 내용과 상태를 결정하는 데 사용할 수 있습니다.수정테이블상태노드를 검사하여 다음에서 런타임 통계를 제공할 수 있습니다.분석 설명케이스. 처음 4개의 인수는 for와 동일합니다.BeginForeignModify.

만약ExplainForeignModify포인터가 다음으로 설정되었습니다.NULL, 동안에는 추가 정보가 인쇄되지 않습니다.설명.

공허
explainDirectModify(ForeignScanState *노드,
                    explainState *es);

추가 인쇄설명원격 서버에서 직접 수정을 위한 출력입니다. 이 함수는 호출할 수 있습니다.ExplainPropertyText및 필드를 추가하는 관련 함수설명출력. 플래그 필드는es인쇄할 내용과 상태를 결정하는 데 사용할 수 있습니다.ForeignScanState노드를 검사하여 다음에서 런타임 통계를 제공할 수 있습니다.분석 설명케이스.

만약ExplainDirectModify포인터가 다음으로 설정되었습니다.NULL, 동안에는 추가 정보가 인쇄되지 않습니다.설명.

57.2.8. FDW 루틴:분석

부울
AnalyzeForeignTable(관계 관계,
                    AcquireSampleRowsFunc *func,
                    BlockNumber *총 페이지 수);

이 함수는 다음과 같은 경우에 호출됩니다.분석은 사설 토토 사이트 테이블에서 실행됩니다. FDW가 이 외부 테이블에 대한 통계를 수집할 수 있으면 다음을 반환해야 합니다., 그리고 테이블에서 샘플 행을 수집할 함수에 대한 포인터를 제공합니다.펑크및 페이지의 예상 테이블 크기(페이지))총 페이지. 그렇지 않으면 반환거짓.

FDW가 테이블에 대한 통계 수집을 지원하지 않는 경우,외부 테이블 분석포인터는 다음으로 설정될 수 있습니다.NULL.

제공된 경우 샘플 수집 기능에는 서명이 있어야 합니다

정수
AcquireSampleRowsFunc(관계 관계,
                      정수 레벨,
                      HeapTuple *행,
                      int targrows,
                      이중 *합계,
                      double *totaldeadrows);

최대 무작위 샘플대상 성장행은 테이블에서 수집되어 호출자 제공에 저장되어야 합니다.배열. 수집된 실제 행 수를 반환해야 합니다. 또한 테이블의 활성 행과 데드 행의 총 개수 추정치를 출력 매개변수에 저장합니다.총계그리고총 교착 상태. (설정총 교착 상태FDW에 데드 행 개념이 없으면 0으로 설정됩니다.)

57.2.9. FDW 루틴:사설 토토 사이트 스키마 가져오기

목록 *
ImportForeignSchema(ImportForeignSchemaStmt *stmt, Oid serverOid);

사설 토토 사이트 테이블 생성 명령 목록을 얻습니다. 이 함수는 실행 시 호출됩니다.사설 토토 사이트 스키마 가져오기, 해당 명령문에 대한 구문 분석 트리와 사용할 외부 서버의 OID가 전달됩니다. C 문자열 목록을 반환해야 하며 각 문자열에는사설 토토 사이트 테이블 생성명령. 이 문자열은 코어 서버에 의해 구문 분석되고 실행됩니다.

내부ImportForeignSchemaStmt구조체,remote_schema테이블을 가져올 원격 스키마의 이름입니다.목록_유형테이블 이름을 필터링하는 방법을 식별합니다:FDW_IMPORT_SCHEMA_ALL원격 스키마의 모든 테이블을 가져와야 함을 의미합니다(이 경우테이블_목록비어 있음),FDW_IMPORT_SCHEMA_LIMIT_TO다음에 나열된 테이블만 포함함을 의미합니다.테이블_목록FDW_IMPORT_SCHEMA_EXCEPT다음에 나열된 테이블을 제외함을 의미합니다.테이블_목록. 옵션은 가져오기 프로세스에 사용되는 옵션 목록입니다. 옵션의 의미는 FDW에 따라 다릅니다. 예를 들어, FDW는 옵션을 사용하여 다음을 정의할 수 있습니다.NULL이 아님열의 속성을 가져와야 합니다. 이러한 옵션은 FDW에서 데이터베이스 개체 옵션으로 지원하는 옵션과 관련이 있을 필요가 없습니다.

FDW는 다음을 무시할 수 있습니다.local_schema필드ImportForeignSchemaStmt, 코어 서버가 자동으로 해당 이름을 구문 분석된 파일에 삽입하기 때문입니다.사설 토토 사이트 테이블 생성명령.

FDW는 다음에 의해 지정된 필터링 구현에 관심을 가질 필요가 없습니다.목록_유형그리고테이블_목록, 둘 중 하나입니다. 코어 서버는 해당 옵션에 따라 제외된 테이블에 대해 반환된 명령을 자동으로 건너뛰기 때문입니다. 그러나 처음부터 제외된 테이블에 대한 명령을 생성하는 작업을 피하는 것이 유용한 경우가 많습니다. 함수IsImportableForeignTable()주어진 사설 토토 사이트 테이블 이름이 필터를 통과하는지 테스트하는 데 유용할 수 있습니다.

FDW가 테이블 정의 가져오기를 지원하지 않는 경우,사설 토토 사이트 스키마 가져오기포인터는 다음으로 설정될 수 있습니다.NULL.

57.2.10. 병렬 실행을 위한 FDW 루틴

A ForeignScan노드는 선택적으로 병렬 실행을 지원할 수 있습니다. 평행ForeignScan은 여러 프로세스에서 실행되며 모든 협력 프로세스에서 각 행을 정확히 한 번만 반환해야 합니다. 이를 위해 프로세스는 고정 크기의 동적 공유 메모리 청크를 통해 조정할 수 있습니다. 이 공유 메모리는 모든 프로세스에서 동일한 주소에 매핑된다는 보장이 없으므로 포인터를 포함해서는 안 됩니다. 다음 함수는 모두 선택 사항이지만 병렬 실행을 지원하려면 대부분 필수입니다.

부울
IsForeignScanParallelSafe(PlannerInfo *root, RelOptInfo *rel,
                          RangeTblEntry *rte);

병렬 작업자 내에서 검사를 수행할 수 있는지 테스트하십시오. 이 함수는 플래너가 병렬 계획이 가능할 수 있다고 믿는 경우에만 호출되며 해당 스캔이 병렬 작업자 내에서 실행되는 것이 안전한 경우 true를 반환해야 합니다. 일반적으로 원격 데이터 소스에 트랜잭션 의미 체계가 있는 경우에는 그렇지 않습니다. 단, 작업자의 데이터 연결이 어떻게든 리더와 동일한 트랜잭션 컨텍스트를 공유하도록 만들어질 수 있는 경우는 예외입니다.

이 기능이 정의되지 않은 경우 스캔은 병렬 리더 내에서 이루어져야 한다고 가정됩니다. true를 반환한다고 해서 스캔 자체가 병렬로 수행될 수 있다는 의미는 아니며, 병렬 작업자 내에서 스캔이 수행될 수 있다는 의미일 뿐입니다. 따라서 병렬 실행이 지원되지 않는 경우에도 이 메서드를 정의하는 것이 유용할 수 있습니다.

크기
EstimateDSMForeignScan(ForeignScanState *node, ParallelContext *pcxt);

병렬 작업에 필요한 동적 공유 메모리의 양을 추정하세요. 이는 실제 사용되는 금액보다 높을 수 있지만, 낮아져서는 안 됩니다. 반환 값은 바이트 단위입니다. 이 기능은 선택사항이므로 필요하지 않은 경우 생략할 수 있습니다. 하지만 생략하면 FDW 사용을 위해 공유 메모리가 할당되지 않으므로 다음 세 함수도 생략해야 합니다.

공허
초기화DSMForeignScan(ForeignScanState *node, ParallelContext *pcxt,
                         무효 *좌표);

병렬 작업에 필요한 동적 공유 메모리를 초기화합니다.좌표반환 값과 동일한 크기의 공유 메모리 영역을 가리킵니다.EstimateDSMForeignScan. 이 기능은 선택사항이므로 필요하지 않으면 생략 가능합니다.

공허
ReInitializeDSMForeignScan(ForeignScanState *node, ParallelContext *pcxt,
                           무효 *좌표);

외부 스캔 계획 노드가 다시 스캔되려고 할 때 병렬 작업에 필요한 동적 공유 메모리를 다시 초기화합니다. 이 기능은 선택사항이므로 필요하지 않으면 생략할 수 있습니다. 권장되는 방법은 이 함수가 공유 상태만 재설정하는 것입니다.ReScanForeignScan함수는 로컬 상태만 재설정합니다. 현재 이 함수는 이전에 호출됩니다.ReScanForeignScan, 하지만 그 순서에 의존하지 않는 것이 가장 좋습니다.

공허
초기화WorkerForeignScan(ForeignScanState *node, shm_toc *toc,
                            무효 *좌표);

리더가 설정한 공유 상태를 기반으로 병렬 작업자의 로컬 상태를 초기화합니다.DSMForeignScan 초기화. 이 기능은 선택사항이므로 필요하지 않으면 생략 가능합니다.

공허
ShutdownForeignScan(ForeignScanState *node);

노드 실행이 완료되지 않을 것으로 예상되면 리소스를 해제하십시오. 모든 경우에 호출되는 것은 아닙니다. 가끔,EndForeignScan이 함수가 먼저 호출되지 않은 상태에서 호출될 수 있습니다. 병렬 쿼리에 사용되는 DSM 세그먼트는 이 콜백이 호출된 직후 삭제되므로 DSM 세그먼트가 사라지기 전에 어떤 조치를 취하려는 외부 데이터 래퍼는 이 메서드를 구현해야 합니다.

57.2.11. 비동기 실행을 위한 FDW 루틴

A ForeignScan노드는 선택적으로 다음에 설명된 대로 비동기 실행을 지원할 수 있습니다.src/백엔드/실행자/README. 다음 함수는 모두 선택 사항이지만 비동기 실행을 지원하려면 모두 필수입니다.

부울
IsForeignPathAsyncCapable(ForeignPath *경로);

주어진 것인지 테스트ForeignPathpath는 기본 외부 관계를 비동기적으로 스캔할 수 있습니다. 이 함수는 주어진 경로가 다음의 직계 하위인 경우 쿼리 계획이 끝날 때만 호출됩니다.AppendPath경로 및 플래너가 비동기 실행이 성능을 향상시킨다고 믿고 지정된 경로가 외부 관계를 비동기적으로 스캔할 수 있는 경우 true를 반환해야 한다고 믿는 경우입니다.

이 함수가 정의되지 않은 경우, 주어진 경로는 다음을 사용하여 외부 관계를 스캔하는 것으로 가정됩니다.IterateForeignScan. (이는 아래에 설명된 콜백 함수가 절대 호출되지 않으므로 제공할 필요가 없음을 의미합니다.)

공허
ForeignAsyncRequest(AsyncRequest *areq);

다음에서 비동기적으로 하나의 튜플을 생성ForeignScan노드.areq이것은AsyncRequest다음을 설명하는 구조체ForeignScan노드 및 상위추가튜플을 요청한 노드입니다. 이 함수는 튜플을 다음으로 지정된 슬롯에 저장해야 합니다.areq-결과및 설정areq-request_complete; 또는 네트워크 I/O와 같은 코어 서버 외부 이벤트를 기다려야 하고 즉시 튜플을 생성할 수 없는 경우 플래그를로 설정합니다.거짓, 그리고 설정areq-callback_pending에 대한ForeignScan노드를 사용하여 아래 설명된 콜백 함수에서 콜백을 가져옵니다. 더 이상 사용할 수 있는 튜플이 없으면 슬롯을 NULL 또는 빈 슬롯으로 설정하고,areq-request_complete다음에 플래그 지정. 사용하는 것이 좋습니다.ExecAsyncRequestDone또는ExecAsyncRequestPending에서 출력 매개변수를 설정하려면areq.

공허
ForeignAsyncConfigureWait(AsyncRequest *areq);

다음에 대한 파일 설명자 이벤트를 구성하십시오.ForeignScan노드가 기다리기를 원합니다. 이 함수는 다음 경우에만 호출됩니다.ForeignScan노드에는areq-callback_pending플래그가 설정되었으며 이벤트를 에 추가해야 합니다.as_eventset부모의추가에서 설명하는 노드areq. 에 대한 설명을 참조하세요.ExecAsyncConfigureWaitinsrc/backend/executor/execAsync.c추가 정보를 확인하세요. 파일 디스크립터 이벤트가 발생하면,ForeignAsyncNotify호출됩니다.

공허
ForeignAsyncNotify(AsyncRequest *areq);

발생한 관련 이벤트를 처리한 후 다음에서 비동기적으로 하나의 튜플을 생성ForeignScan노드. 이 함수는에서 출력 매개변수를 설정해야 합니다.areq다음과 같은 방식으로사설 토토 사이트Async요청.

57.2.12. 경로 재매개변수화를 위한 FDW 루틴

목록 *
ReparameterizeForeignPathByChild(PlannerInfo *root, 목록 *fdw_private,
                                 RelOptInfo *child_rel);

이 함수는 주어진 하위 관계의 최상위 상위에 의해 매개변수화된 경로를 변환하는 동안 호출됩니다.child_rel하위 관계에 의해 매개변수화됩니다. 이 함수는 경로를 다시 매개변수화하거나 주어진에 저장된 표현식 노드를 변환하는 데 사용됩니다.fdw_privatea의 회원ForeignPath. 콜백은 다음을 사용할 수 있습니다.reparameterize_path_by_child, adjust_appendrel_attrs또는adjust_appendrel_attrs_multilevel필요에 따라.

수정사항 제출

문서에 올바르지 않은 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 경험이 있거나 추가 설명이 필요한 경우 이용해주세요이 양식문서 문제를 보고합니다.