PostgreSQL 39.6.控制结构: RETURN QUERY有一个变量RETURN QUERY EXECUTE,它指定要动态执行的查询.可以通过USING将参数表达式插入到计算的查询字符串中,其方式与EXECUTE命令中的方式相同.
但动态意味着什么?
这两个语句之间有什么区别(带func_param参数的内部函数):
RETURN QUERY SELECT * FROM foo WHERE foo_col = func_param;
Run Code Online (Sandbox Code Playgroud)
和
RETURN QUERY EXECUTE 'SELECT * FROM foo WHERE foo_col = $1' USING func_param;
Run Code Online (Sandbox Code Playgroud)
?
Lau*_*lbe 10
这两个示例之间的区别在于,在第一个示例中,可以保留查询计划并将其重用于将来在同一数据库会话中执行.
在第二个示例中,每次执行函数时都会计划查询.
第一个示例的优点是,如果重复执行该功能,则可以节省计划时间.从第六次执行开始,PostgreSQL可能会选择使用通用计划(请参阅文档),该计划将用于同一数据库会话中的所有未来执行.
第二个例子只有在选择的通用计划证明不好的情况下才有用,而且你宁愿让PostgreSQL每次都重新计算查询.
| 归档时间: |
|
| 查看次数: |
6028 次 |
| 最近记录: |