如何使用Postgrex在Amazon Redshift上执行的SELECT语句的结果填充本地Postgres表?

时间:2019-07-05 22:40:24

标签: postgresql elixir amazon-redshift ecto postgrex

Postgrex文档提供了如何传输数据的出色示例:

Postgrex.transaction(pid, fn(conn) ->
  query = Postgrex.prepare!(conn, "", "COPY posts TO STDOUT")
  stream = Postgrex.stream(conn, query, [])
  result_to_iodata = fn(%Postgrex.Result{rows: rows}) -> rows end
  Enum.into(stream, File.stream!("posts"), result_to_iodata)
end)

Postgrex.transaction(pid, fn(conn) ->
  stream = Postgrex.stream(conn, "COPY posts FROM STDIN", [])
  Enum.into(File.stream!("posts"), stream)
end)

但是,这在Redshift上不起作用,因为Redshift不支持COPY TO STDOUT。如果我从Postgrex尝试它,则会收到语法错误,与从psql尝试它一样。根据Redshift的说法,“不支持从Xen表复制文件”。

所以我将COPY TO STDOUT切换为SELECT,但是现在我不知道如何在第二部分中加载它。如果我将其保留为COPY FROM STDIN,它将仅将所有结果加载到一行中。

有什么建议吗?

0 个答案:

没有答案