SPI_execute_plan_extended — 执行一个由SPI_prepare准备的语句
int SPI_execute_plan_extended(SPIPlanPtrplan, const SPIExecuteOptions *options)
   SPI_execute_plan_extended 执行一个由SPI_prepare或它的一个同类所准备的语句。
   这个函数等同于SPI_execute_plan,除了传递到查询的参数值的信息表现不同,并且可以传递附加的执行控制选项。
  
   查询参数值由ParamListInfo结构体表示,便于继承已经按那种格式生效的值。
   动态参数设置也可以使用,通过指定的钩子函数。
  
   而且,与总是累积结果元组到SPI_tuptable结构不同,元组可以传递到调用器支持的DestReceiver对象,就像他们被执行器产生的那样。
   这个对可能产生多个元组的铲鲟特别有帮助,因为数据可以在运行中处理而不是积累在内存中。
  
SPIPlanPtr plan
      预备语句(由SPI_prepare返回)
     
const SPIExecuteOptions * options包含可选参数的结构体
   调用器将总是将整个options结构体归零,然后填充他们想设置的任何字段。
   这确保代码的向前兼容性,因为在未来添加到结构体中的任何字段将被定义成行为向后兼容,如果他们为零。
   当前有效的options字段为:
  
ParamListInfo params包含查询参数类型和值的数据结构;没有则为NULL
bool read_only对只读执行为true
bool allow_nonatomic
      true允许非原子执行CALL和DO语句(但此字段会被忽略,
      除非将SPI_OPT_NONATOMIC标志传递给
      SPI_connect_ext)
bool must_return_tuples
      如果为true,如果查询不是一种返回元组时抛出错误(这不禁止发生返回零元组的情况) 
     
uint64 tcount
      要返回的最大行数,或者用0表示没有限制
     
DestReceiver * dest
      DestReceiver 对象将接收查询发出的任何元组;如果为NULL,结果元组积累到SPI_tuptable结构之中,就像在SPI_execute_plan中一样。
     
ResourceOwner owner资源的所有者,将在执行时持有计划上的引用计数。 忽略不保存的计划,就像SPI不获取他们的引用计数。
   返回值与SPI_execute_plan一样。
  
   当 options->dest 为 NULL时,SPI_processed 和 SPI_tuptable 在SPI_execute_plan中设定。
   当 options->dest 不为 NULL时,SPI_processed 被设定为零,而且SPI_tuptable 被设定为 NULL。
   如果需要元组计数,调用器的DestReceiver对象必须计算它。