2016-09-28 71 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