SPI_execute_extended — 执行带线外参数的命令
int SPI_execute_extended(const char *command, const SPIExecuteOptions *options)
   SPI_execute_extended执行一个可能包括关于外部支持参数的命令。
   命令文本引用参数为$,以及noptions->params对象(如果支持)提供值和类型信息,对于每个符号。
   不同的执行选项也可以在options结构中指定。
  
   options->params 对象将通常以PARAM_FLAG_CONST特征位标记每个参数,因为一个一次性计划总是用于查询。
  
   如果options->dest为非NULL,则结果元组被传递到执行器产生的对象,而不是积累在SPI_tuptable里。
   使用调用器支持的DestReceiver对象特别有帮助,对于可能产生多个元组的查询,因为数据可以在过程中处理而不是积累在内存里。
  
const char * command命令字符串
const SPIExecuteOptions * options包含可选参数的结构体
   调用器将总是将整个options结构体归零,然后填充他们想设置的任何字段。
   这确保代码的向前兼容性,因为在未来添加到结构体中的任何字段将被定义成行为向后兼容,如果他们为零。
   当前有效的options字段为:
  
ParamListInfo params包含查询参数类型和值的数据结构;没有则为NULL
bool read_only对只读执行为true
bool allow_nonatomic
      true 允许CALL和DO语句的非原子执行。
     
bool must_return_tuples
      如果为true,如果查询不是一种返回元组时抛出错误(这不禁止发生返回零元组的情况) 
     
uint64 tcount
      要返回的最大行数,或者用0表示没有限制
     
DestReceiver * dest
      DestReceiver 对象将接收查询发出的任何元组;如果为NULL,结果元组积累到SPI_tuptable结构之中,就像在SPI_execute中一样。
     
ResourceOwner owner
      这个字段表现和SPI_execute_plan_extended一致,但是它被忽略,因为被SPI_execute_extended使用的计划从来不保存。
     
   返回值同SPI_execute一样。
  
   当options->dest为NULL时,SPI_processed 和 SPI_tuptable设置为在SPI_execute中。
   当options->dest不为NULL时,SPI_processed被设置为零,并且SPI_tuptable被设置为NULL。
   如果需要元组计数,调度器的DestReceiver对象必须计算它。