PostgreSQL COPY可以从远程位置读取CSV吗?

时间:2012-05-04 18:12:16

标签: postgresql jdbc

我一直在使用JDBC和本地Postgres数据库,使用Postgres COPY命令将CSV文件中的数据复制到数据库中。我使用Java将现有的CSV文件解析成与DB中的表格匹配的CSV格式。然后我将解析后的CSV保存到本地磁盘。然后我让JDBC使用解析的CSV执行COPY命令到我的本地数据库。一切都按预期工作。 现在,我正在尝试使用JDBC在远程服务器上的Postgres DB上执行相同的过程。但是,当JDBC尝试执行COPY时,我得到了

org.postgresql.util.PSQLException: ERROR: could not open file "C:\data\datafile.csv" for reading: No such file or directory

我是否理解COPY命令告诉DB在本地查找此文件? I.E.远程服务器正在查看其C:驱动器(不存在)。

如果是这种情况,是否仍然指示复制命令在我的计算机上查找而不是在远程计算机上“本地”?通过复制文档阅读我没有发现任何表明此功能的内容。

如果该功能不存在,我想只是在本地填充整个数据库,然后将数据库复制到远程服务器,但只是想检查一下我没有遗漏任何东西。

感谢您的帮助。

3 个答案:

答案 0 :(得分:5)

在客户端计算机上按如下方式创建sql文件

COPY testtable (column1, c2, c3) FROM STDIN WITH CSV;
1,2,3
4,5,6
\.

然后在您的客户端上执行

psql -U postgres -f /mylocaldrive/copy.sql -h remoteserver.example.com

答案 1 :(得分:4)

如果您使用JDBC,最适合您的方法是使用PostgreSQL COPY API http://jdbc.postgresql.org/documentation/publicapi/org/postgresql/copy/CopyManager.html

否则(正如其他人已经指出的那样)你可以使用\ copy来自psql,它允许访问客户端机器上的本地文件

答案 2 :(得分:1)

据我所知,COPY命令只能用于从运行数据库的机器本地读取(从stdin或从文件中读取)。

您可以创建一个shell脚本来运行java转换,然后使用psql执行\copy命令,该命令从客户端机器上的文件读取