CSV文件将上传到Amazon S3存储桶中。
当前实施:
绝对不知道之后发生了什么
谷歌搜索后,发现PostgreSQL中的copy
命令是将READ / WRITE写入PostgreSQL DB的最快方法。
Java,C,Python等多种语言也支持此功能。
使用PostgreSQL的CopyManager
API进行了尝试,该API具有copyIn方法的重载版本。
copyIn(String sql, InputStream is)
-由于csv在第一行中包含标题列,因此我们想跳过第一行。
copyIn(String sql, Reader rd)
-这不接受CSVReader对象,因为它不是java.io.Reader类型
技术
答案 0 :(得分:2)
我能够找出代码缺陷。 我们提供了db列之一作为“唯一性”约束,而不必这样做,而在CSV文件中,此列有重复的值。因此,记录插入失败。
谢谢, 凤尾鱼
答案 1 :(得分:1)
由于我们的csv在第一行中包含标题列,并且我们要跳过第一行,因此我们无法使用它。
这就是COPY ... WITH HEADER
的目的。
指定文件包含标题行,其中包含文件中每一列的名称。输出时,第一行包含表中的列名,输入时,第一行被忽略。仅当使用CSV格式时,才允许使用此选项。
答案 2 :(得分:0)
我们无法使用此代码,因为我们的csv在第一行中包含标题列,并且我们希望跳过第一行。
因此,只需跳过第一行。 copyIn()
不会“倒带”它获得的阅读器。您也不需要使用CSVReader。 copy
语句将负责解析CSV文件。您需要做的就是提供一个位于应该处理的第一行的阅读器。
大致情况:
CopyManager mgr = new CopyManager(...);
BufferedReader in = new BufferedReader(new FileReader(...));
in.readLine(); // skip the header line
mgr.copyIn("copy target_table from stdin with (...)", in);
确保在copy
命令中提供适当的选项,以便可以正确解析文件。