jdbc + große Postgresql-Abfrage gibt nicht genügend Arbeitsspeicher

8

Ich versuche, eine postgresql-Abfrage auszuführen, die ein großes Ergebnis zurückgibt:

%Vor%

, aber das verbraucht viel Speicher:

%Vor%

(gedruckt mit Runtime.getRuntime (). freeMemory ())

Bisher funktioniert es, aber die Datenbank wird viel größer sein. Ich brauche das gesamte Ergebnis nie im Gedächtnis; Ich muss nur jede Zeile verarbeiten, schreibe die Ergebnisse auf die Festplatte und gehe zur nächsten Zeile.

Ich weiß, "setFetchSize" ist nur ein Hinweis, aber ich würde es seltsam finden, wenn postgresql / jdbc es ignorieren würde, wie es seit Ewigkeiten ist.

Irgendein Weg, um das zu umgehen? Meine einzige Idee ist bisher, ein Batch-Skript zu erstellen, das das Ergebnis der Abfrage auf den Datenträger streamt und dann die Datei von Java aus analysiert ...

    
kresjer 01.10.2009, 14:36
quelle

2 Antworten

7

Autsch, das ist einer der schlimmsten Bugs, die ich mit JDBC gesehen habe. Sie sollten

ändern %Vor%

in

%Vor%

Vielleicht einfach

%Vor%

funktioniert ebenfalls (da Sie die anderen Kriterien für einen Cursor erfüllt haben).

    
Frank Meulenaar 01.10.2009, 20:17
quelle
9

Hier sind die Richtlinien, um sicherzustellen, dass die Ergebnismenge tatsächlich abgerufen wird mit einem Cursor. Sie scheinen alle bekannten in Ihrem Code zu treffen, aber Sie haben die Anweisung nicht angegeben, daher kann es mehrere sein, die mit Semikolons aneinandergereiht sind (unwahrscheinlich, nach dem Aussehen Ihres Codes). Sie müssen das V3-Protokoll (Version 7.4 oder höher) verwenden. Treffen all diese Dinge auf Ihren Fall zu?

    
Yishai 01.10.2009 14:55
quelle

Tags und Links