我一直在使用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:驱动器(不存在)。
如果是这种情况,是否仍然指示复制命令在我的计算机上查找而不是在远程计算机上“本地”?通过复制文档阅读我没有发现任何表明此功能的内容。
如果该功能不存在,我想只是在本地填充整个数据库,然后将数据库复制到远程服务器,但只是想检查一下我没有遗漏任何东西。
感谢您的帮助。
答案 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
命令,该命令从客户端机器上的文件读取