PostgreSQL实现了四种执行策略:
(1)PORTAL_ONE_SELECT:如果用户提交的SQL语句中仅包含一个SELECT类型查询,则查询执行器会使用执行器来处理该SQL语句。换句话说,这种策略用于处理仅有一个可优化原子操作的情况。
(2)PORTAL_ONE_RETURNING(PORTAL_ONE_MOD_WITH):如果用户提交的SQL语句中包含一个带有RETURNING字句的INSERT/UPDATE/DELETE语句,查询执行器会选择这种策略。因为处理该类语句应该先完成所有操作(对元组的修改操作),然后返回结果(例如操作是否成功、被修改的元组数量等),以减少出错的风险。查询执行器在执行时,将首先处理所有满足条件的元组,并将执行过程的结果缓存,然后将结果返回。
(3)PORTAL_UTIL_SELECT:如果用户提交的SQL语句是一个功能类型语句,但是其返回结果类似SELECT语句(例如EXPLAIN和SHOW),查询执行器将选择这种策略。以此种策略执行时,同样首先执行语句并获取完整结果,并将结果缓存起来,然后将结果返回给用户。
(4)PORTAL_MULTI_QUERY:用于处理除以上三种情况之外的操作。从其名称中的“MULTI”就能够看出,这个策略更具有一般性,能够处理一个或多个原子操作,并根据操作的类型选择合适的处理部件。
简单来说,PORTAL_ONE_SELECT是用来处理SELECT语句的,该策略会调用执行器来执行;PORTAL_ONE_RETURNING