Skip to content

Instantly share code, notes, and snippets.

@hassanRsiddiqi
Forked from avdgaag/stream_csv.ex
Created November 1, 2020 09:18
Show Gist options
  • Save hassanRsiddiqi/2c1b41c58d6dc6a1a6d76055e8aa0c17 to your computer and use it in GitHub Desktop.
Save hassanRsiddiqi/2c1b41c58d6dc6a1a6d76055e8aa0c17 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