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;
答案 0 :(得分:7)
这两个示例之间的区别在于,在第一个示例中,可以保留查询计划并将其重用于将来在同一数据库会话中执行。
在第二个示例中,每次执行函数时都会计划查询。
第一个示例的优点是,如果重复执行该功能,则可以节省计划时间。从第六次执行开始,PostgreSQL可以选择使用通用计划(参见the documentation),该计划将用于同一数据库会话中的所有未来执行。
第二个例子只有在选择的通用计划证明不好的情况下才有用,而且你宁愿让PostgreSQL每次都重新计算查询。