Memory-constant streaming of Esqueleto results from PostgreSQL.
This library provides a set of APIs for performing queries in Esqueleto in constant memory, streaming the results using conduit
.
The library relies on PostgreSQL-specific features to avoid loading all the results of a query into memory at once. This allows for accessing results of millions of rows from Haskell without a memory blow-up.
esqueleto-streaming
This library allows for memory-constant streaming of the results of esqueleto
queries from PostgreSQL databases.
This code makes use of the PostgreSQL-only cursors, which allow for batched access to the result set of a query at speeds comparable to loading all the results into memory at once.
See the main project README for more.
Streaming results from Esqueleto queries
The main function of this library is selectCursor
, which can be used in place of select
to run an Esqueleto query. selectCursor
runs in a ConduitT
- consuming the conduit will pull results from the database in constant memory.
FAQ
Why is selectCursor
so slow?
Have you configured PostgreSQL correctly? See the section in the README about it.