2016-09-28 3 views
2

PostgreSQL 39.6. Control Structures: RETURN QUERY EXECUTE hat eine Variante RETURN QUERY EXECUTE, die die Abfrage gibt dynamisch ausgeführt werden. Parameterausdrücke können über USING genauso in die berechnete Abfragezeichenfolge eingefügt werden wie im Befehl EXECUTE.RETURN QUERY vs RETURN QUERY

Aber was bedeutet dynamisch?

Was ist ein Unterschied zwischen diesen beiden Aussagen (innen Funktion mit func_param Parameter):

RETURN QUERY SELECT * FROM foo WHERE foo_col = func_param; 

und

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

?

Antwort

3

Der Unterschied zwischen diesen beiden Beispielen besteht darin, dass der Abfrageplan im ersten Fall beibehalten und für zukünftige Ausführungen in derselben Datenbanksitzung wiederverwendet werden kann.

Im zweiten Beispiel wird die Abfrage jedes Mal geplant, wenn die Funktion ausgeführt wird.

Der Vorteil des ersten Beispiels ist, dass Sie Planungszeit sparen, wenn die Funktion wiederholt ausgeführt wird. Ab der sechsten Ausführung kann PostgreSQL einen generischen Plan (siehe) verwenden, der für alle zukünftigen Ausführungen in derselben Datenbanksitzung verwendet wird.

Das zweite Beispiel ist nur nützlich, wenn sich der gewählte generische Plan als fehlerhaft erweist, und Sie möchten, dass PostgreSQL die Abfrage jedes Mal neu plant.

+0

gut erklärt :) danke! – ilovkatie