2016-09-28 72 views
2

PostgreSQL 39.6. Control Structures: RETURN QUERY具有变体RETURN QUERY EXECUTE,其指定要动态执行查询。通过USING可以将参数表达式插入到计算出的查询字符串中,就像在EXECUTE命令中一样。RETURN QUERY VS RETURN QUERY 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; 

回答

3

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

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

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

第二个例子是只有有用的,如果选择的通用计划证明了坏了,你宁愿有PostgreSQL的每一次重新规划查询。

+0

很好解释:)谢谢! – ilovkatie