将数据从本地.CSV文件复制到远程服务器中的pgsql表

时间:2016-10-30 22:33:13

标签: postgresql

我正在尝试将来自本地计算机的csv文件中的数据复制到名为states的远程pgsql表中,但是我收到错误:“FROM”或其附近的语法错误。有人可以指导我为什么收到这个错误吗?

   COPY FROM STDIN states FROM '/Users/Shared/data.csv'  DELIMITER AS ',';

2 个答案:

答案 0 :(得分:2)

问题是文件的路径是在远程服务器中,而不是本地路径。

你需要psql并将文件传递给STDIN:

psql -h host -d remoteDB -U myuser -c  "copy states from STDIN with delimiter as ',';" < /path/file.csv

或者您也可以这样做:

cat /path/file.csv | psql -h host -d remoteDB -U myuser -c  "copy states from STDIN with delimiter as ',';"

答案 1 :(得分:0)

除非文件位于Postgres服务器上,否则无法直接使用文件名。 The docs of COPY state

  

带有文件名的COPY指示PostgreSQL服务器直接读取或写入文件。该文件必须可供服务器访问,并且必须从服务器的角度指定名称。指定STDIN或STDOUT时,数据通过客户端和服务器之间的连接传输。

您必须通过STDIN管道传输文件。

许多Postgres驱动程序提供了一种方法来简化这一过程。例如,ruby-pg provides copy_data

conn.copy_data "COPY states FROM STDIN FORMAT CSV" do
  File.foreach('/Users/Shared/data.csv') do |line|
    conn.put_copy_data(line)
  end
end