PostgreSQL COPY能否从远程位置读取CSV?

PostgreSQL COPY能否从远程位置读取CSV?,postgresql,jdbc,Postgresql,Jdbc,我一直在使用JDBC和本地Postgres DB,使用Postgres copy命令将CSV文件中的数据复制到数据库中。我使用Java将现有的CSV文件解析为与数据库中的表匹配的CSV格式。然后,我将解析后的CSV保存到本地磁盘。然后,我让JDBC使用解析后的CSV执行复制命令到本地数据库。一切正常。 现在,我尝试使用JDBC在远程服务器上的Postgres DB上执行相同的过程。然而,当JDBC试图执行我得到的拷贝时 org.postgresql.util.PSQLException: ERR

我一直在使用JDBC和本地Postgres DB,使用Postgres copy命令将CSV文件中的数据复制到数据库中。我使用Java将现有的CSV文件解析为与数据库中的表匹配的CSV格式。然后,我将解析后的CSV保存到本地磁盘。然后,我让JDBC使用解析后的CSV执行复制命令到本地数据库。一切正常。 现在,我尝试使用JDBC在远程服务器上的Postgres DB上执行相同的过程。然而,当JDBC试图执行我得到的拷贝时

org.postgresql.util.PSQLException: ERROR: could not open file "C:\data\datafile.csv" for reading: No such file or directory
我理解COPY命令告诉DB在本地查找此文件是否正确?即,远程服务器正在查看其C:驱动器(不存在)

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

如果功能不存在,我会考虑在本地填充整个数据库,然后复制到数据库到远程服务器,但只想检查我是否遗漏了任何内容


谢谢您的帮助。

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


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

如果您使用JDBC,最好的解决方案是使用PostgreSQL copy API


否则(如其他人所述),您可以使用\copy from psql,它允许访问客户端计算机上的本地文件

在客户端计算机上创建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

copy可以读取“来自STDIN”--它本身不必从磁盘读取文件。@FrankFarmer根据您的评论进行更新。谢谢您的回答。我不知道这个类的存在。我将在我的解析/导入程序中实现它。谢谢,这就是我所做的(以某种形式),因为我最终已经在本地机器上创建了表。接下来,我将使用下面列出的API。