5

我一直在使用带有本地 Postgres DB 的 JDBC,使用 Postgres COPY 命令将数据从 CSV 文件复制到数据库中。我使用 Java 将现有的 CSV 文件解析为与数据库中的表匹配的 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 命令告诉数据库在本地查找此文件?IE 远程服务器正在查看其 C: 驱动器(不存在)。

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

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

谢谢你的帮助。

4

3 回答 3

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

于 2012-05-04T18:23:24.513 回答
4

如果您使用 JDBC,最好的解决方案是使用 PostgreSQL COPY API http://jdbc.postgresql.org/documentation/publicapi/org/postgresql/copy/CopyManager.html

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

于 2012-05-04T18:22:26.443 回答
1

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

您可以制作一个 shell 脚本,在其中运行 java 转换,然后用于psql执行命令,该命令从客户端计算机\copy上的文件中读取。

于 2012-05-04T18:17:19.450 回答