"Cara yang benar" untuk melakukan streaming dengan Slick dan Postgres mencakup tiga hal:
-
Harus menggunakan db.stream()
-
Harus menonaktifkan
autoCommit
di JDBC-driver. Salah satu caranya adalah dengan membuat kueri berjalan dalam suatu transaksi dengan memberi akhiran.transactionally
. -
Harus mengatur
fetchSize
menjadi sesuatu selain 0 atau postgres akan mendorong seluruh resultSet ke klien sekaligus.
Contoh:
DB.stream(
find(0L, 0L)
.transactionally
.withStatementParameters(fetchSize = 1000)
).foreach(println)
Tautan yang berguna:
https://github.com/slick/slick/issues/1038
https://github.com/slick/slick/issues/809