"Cách đúng đắn" để phát trực tuyến với Slick và Postgres bao gồm ba điều:
-
Phải sử dụng db.stream ()
-
Phải tắt
autoCommit
trong trình điều khiển JDBC. Một cách là làm cho truy vấn chạy trong một giao dịch bằng cách thêm vào.transactionally
. -
Phải đặt
fetchSize
là một cái gì đó khác 0, nếu không postgres sẽ đẩy toàn bộ resultSet đến máy khách trong một lần.
Ví dụ:
DB.stream(
find(0L, 0L)
.transactionally
.withStatementParameters(fetchSize = 1000)
).foreach(println)
Các liên kết hữu ích:
https://github.com/slick/slick/issues/1038
https://github.com/slick/slick/issues/809