Skip to content

Instantly share code, notes, and snippets.

@tngan
Forked from avdgaag/stream_csv.ex
Created November 9, 2017 07:21
Show Gist options
  • Save tngan/62a24551e2c2856a21ca8330da17013d to your computer and use it in GitHub Desktop.
Save tngan/62a24551e2c2856a21ca8330da17013d to your computer and use it in GitHub Desktop.
Streaming CSV straight out of the database to the client using Elixir, Phoenix, Ecto and PostgreSQL.
def index(conn, _params) do
conn = conn
|> put_resp_content_type("text/csv")
|> put_resp_header("content-disposition", "attachment; filename=export.csv")
|> send_cunked(200)
Repo.transaction fn ->
Ecto.Adapters.SQL.stream(Repo, "COPY expensive_report TO STDOUT CSV HEADER")
|> Stream.map(&(chunk(conn, &1.rows)))
|> Stream.run
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment