Как заполнить локальную таблицу Postgres результатами оператора SELECT, выполненного в Amazon Redshift с использованием Postgrex? - PullRequest
1 голос
/ 06 июля 2019

В документации 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, «COPY TO файл из Xen-таблиц не поддерживается».

Итак, я переключил свой COPY TO STDOUT на SELECT, но теперь я не знаю, как загрузить его во второй части. Если я сохраню его как COPY FROM STDIN, он просто загрузит все результаты в один ряд.

Есть предложения?

...