【修正SPI受自定义解析器影响而导致PL/pgSQL在启用自定义解析器时可能导致非逾期结果的问题】

【实现内容】:

  1. 直接调用raw_parser从而绕开pg_parse_query函数选择自定义语法解析器
  2. 修改Makefile每次获取平台信息为configure时一次获取,以提升make性能

【根因分析】:
PL/pgSQL调用SPI接口解析执行SQL语句,而SPI调用pg_parse_query函数解析SQL,
而pg_parse_query函数受自定义解析器的影响可能调用不同的语法解析器。

【修改方案】:
修正SPI受自定义解析器影响而导致PL/pgSQL在启用自定义解析器时可能导致非逾期结果的问题。

现在SPI接口默认解析器直接调用raw_parser从而绕开pg_parse_query函数选择自定义语法解析器,
pg_parse_query函数不但封装了raw_parser,而且还记录语法解析时长等信息。
些次更后也以为着默认情况下不再记录这些信息,我认为这也是没有必要的,
因为调用SPI代码的往往都是PL或内部特殊代码,而这些时长不应算在语法解析上,
PostgreSQL 14开始也是直接调用raw_parser函数。

为什么不在SPI接口内部直接调用raw_parser函数而是新增加一个默认参数呢?
因为要为以后新增加其它PL准备,比如新增加兼容MySQL或其它存储过程时,
它需要使用自已的语法解析,又因为相同的语句在不同的数据库下可能存在不同的
语义,所以不可能做到完全兼容PG的语法(即便可以,工作量也会非常大).