A "maneira certa" de fazer streaming com Slick e Postgres inclui três coisas:
-
Deve usar db.stream()
-
Deve desabilitar oautoCommit
no driver JDBC. Uma maneira é fazer a consulta ser executada em uma transação com o sufixo.transactionally
.
-
Deve definirfetchSize
para ser algo diferente de 0 ou então o postgres enviará todo o resultSet para o cliente de uma só vez.
Ex:
DB.stream(
find(0L, 0L)
.transactionally
.withStatementParameters(fetchSize = 1000)
).foreach(println)
Links Úteis:
https://github.com/slick/slick/issues/1038
https://github.com/slick/slick/issues/809