Skip to content

Instantly share code, notes, and snippets.

@avdgaag
Created July 13, 2017 09:28
Show Gist options
  • Save avdgaag/b630a76fc31cb9558f6c5e35c1a69669 to your computer and use it in GitHub Desktop.
Save avdgaag/b630a76fc31cb9558f6c5e35c1a69669 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