RETURN QUERY vs RETURN QUERY EXECUTE

时间:2016-09-28 06:26:34

标签: postgresql

  

PostgreSQL 39.6. Control Structures: RETURN QUERY有一个变量RETURN QUERY EXECUTE,它指定查询动态执行。可以通过USING将参数表达式插入到计算的查询字符串中,其方式与EXECUTE命令中的方式相同。

但是什么意思动态

这两个语句之间有什么区别(带func_param参数的内部函数):

RETURN QUERY SELECT * FROM foo WHERE foo_col = func_param;

RETURN QUERY EXECUTE 'SELECT * FROM foo WHERE foo_col = $1' USING func_param;

1 个答案:

答案 0 :(得分:7)

这两个示例之间的区别在于,在第一个示例中,可以保留查询计划并将其重用于将来在同一数据库会话中执行。

在第二个示例中,每次执行函数时都会计划查询。

第一个示例的优点是,如果重复执行该功能,则可以节省计划时间。从第六次执行开始,PostgreSQL可以选择使用通用计划(参见the documentation),该计划将用于同一数据库会话中的所有未来执行。

第二个例子只有在选择的通用计划证明不好的情况下才有用,而且你宁愿让PostgreSQL每次都重新计算查询。