„Правилният начин“ за стрийминг със Slick и Postgre включва три неща:
-
Трябва да използвате db.stream()
-
Трябва да деактивирате
autoCommit
в JDBC-драйвер. Един от начините е да накарате заявката да се изпълнява в транзакция, като добавите суфикс към.transactionally
. -
Трябва да зададете
fetchSize
да бъде нещо различно от 0 или в противен случай postgres ще изпрати целия resultSet на клиента наведнъж.
Пример:
DB.stream(
find(0L, 0L)
.transactionally
.withStatementParameters(fetchSize = 1000)
).foreach(println)
Полезни връзки:
https://github.com/slick/slick/issues/1038
https://github.com/slick/slick/issues/809