2016-05-10 14 views
0

Ich habe die folgende Abfrage, die ich jede Nacht ausführen.Postgres: Führen Sie die Anweisung und Limit

perform distinct fn_debtor_summary(clientacc) from client where not clientacc is null; 

jedoch, weil die Funktion ziemlich langsam ist, wenn ich debuggen Ich mag eine kleine Teilmenge von Daten debuggen aus, so dass ich die folgenden Abfrage.

perform distinct fn_debtor_summary(clientacc) from client where not clientacc is null limit 10; 

Allerdings finde ich, dass das Limit nicht funktioniert und es die Funktion gegen die ganze Tabelle ausführt.

Irgendwelche Ideen, warum das passiert und wie ich es gegen eine kleine Teilmenge der Daten ausführen könnte, ohne temporäre Tabellen zu erstellen?

+2

Sie müssen das Limit in den Statements innerhalb der Funktion übergeben. –

Antwort

0

PostgreSQL führt Funktionen in jeder Zeile der PERFORM-Abfrage aus, bevor das Limit angewendet wird. Selbst wenn es nur 10 zurückgibt, wird die Funktion trotzdem mehr als 10 Mal ausgeführt.

Die Lösung besteht darin, eine Unterabfrage zu verwenden, interessanterweise funktioniert PERFORM nicht, aber ein SELECT funktioniert auch.

select fn_debtor_summary(limitclients.clientacc) from (select clientacc from client limit 1) limitclients; 
Verwandte Themen