1. GetForeignRelSize:
- 用于计算外部表的大小和统计信息。该函数返回 FdwPlan 结构,包含关于远程表的估计大小和统计信息。
void GetForeignRelSize(PlannerInfo *root, RelOptInfo *baserel, Oid foreigntableid);
2. GetForeignPaths:
- 用于生成访问外部表的可能路径。该函数返回 FdwPath 结构,其中包含可用的访问路径。
void GetForeignPaths(PlannerInfo *root, RelOptInfo *baserel, Oid foreigntableid);
3. GetForeignPlan:
- 用于生成远程执行计划。该函数返回 FdwPlan 结构,其中包含生成的执行计划。
ForeignScan *GetForeignPlan(PlannerInfo *root, RelOptInfo *baserel, Oid foreigntableid, ForeignPath *best_path, List *tlist, List *scan_clauses, Plan *outer_plan);
4. BeginForeignScan:
- 在远程扫描开始时被调用。在这里,你可以进行一些初始化工作,例如建立到远程数据源的连接。
void BeginForeignScan(ForeignScanState *node, int eflags);
5. IterateForeignScan:
- 用于从远程数据源获取一行数据。该函数在每次迭代中被调用,用于检索下一行数据。
TupleTableSlot *IterateForeignScan(ForeignScanState *node);
6. ReScanForeignScan:
- 用于在重新扫描外部表时执行一些操作。该函数可能用于重置远程扫描的状态。
void ReScanForeignScan(ForeignScanState *node);
7. EndForeignScan:
- 在远程扫描结束时被调用。在这里,你可以进行清理工作,例如关闭到远程数据源的连接。
void EndForeignScan(ForeignScanState *node);
这些回调例程需要在实现你的 FDW 时适当填充和实现。它们提供了与 PostgreSQL 查询计划和执行过程交互的关键接口。根据你的外部数据源的特性和要求,你可能需要详细了解每个回调例程的具体功能和使用方式。在 PostgreSQL 官方文档中,你可以找到关于 FDW 回调例程的更详细的信息和示例。
转载请注明出处:http://www.zyzy.cn/article/detail/8918/PostgreSQL