Der "richtige Weg" zum Streamen mit Slick und Postgres umfasst drei Dinge:
-
Muss db.stream()
verwenden -
Muss
autoCommit
deaktivieren im JDBC-Treiber. Eine Möglichkeit besteht darin, die Abfrage in einer Transaktion auszuführen, indem.transactionally
angehängt wird . -
Muss
fetchSize
setzen etwas anderes als 0 sein, sonst wird postgres das gesamte resultSet auf einmal an den Client senden.
Beispiel:
DB.stream(
find(0L, 0L)
.transactionally
.withStatementParameters(fetchSize = 1000)
).foreach(println)
Nützliche Links:
https://github.com/slick/slick/issues/1038
https://github.com/slick/slick/issues/809