将CSV文件复制到PostgreSQL中的表

时间:2016-03-16 01:17:33

标签: postgresql csv

我收到此错误:

ERROR:  syntax error at or near "\"
LINE 1: \COPY "Staging_Budget" FROM 'C:\Users\My.Name\Desktop\RD - F...
        ^
    ********** Error **********

当我尝试执行这个简单的命令时:

\COPY "Staging_Budget" FROM 'C:\Users\My.Name\Desktop\RD - Facilities Management (001321).csv';

谁能告诉我为什么会这样?

此外,任何人都可以告诉我为什么网上的例子都没有像我一样在文件路径中列出驱动器(C :)或文件类型(.csv)?

Postgres版本是9.5,我的操作系统是Windows 7。

谢谢!

更新:

我尝试运行此声明:

COPY "Staging_Budget" FROM STDIN 'C:\Program Files (x86)\PostgreSQL\9.5\data\csv\RD - Facilities Management (001321).csv';

我读了here我需要将CSV文件移动到postgres CSV文件目录。我没有,所以我在上面的语句中的文件路径中创建了它。现在我收到此错误消息:

ERROR:  syntax error at or near "'C:\Program Files (x86)\PostgreSQL\9.5\data\csv\RD - Facilities Management (001321).csv'"
LINE 1: COPY "Staging_Budget" FROM STDIN 'C:\Program Files (x86)\Pos...
                                         ^

我不明白为什么postgres不喜欢撇号,只要我在网上和参考指南中找到的每个例子都给出了撇号。

3 个答案:

答案 0 :(得分:1)

问题在于您可以 COPY "Staging_Budget" FROM STDIN COPY "Staging_Budget" FROM 'C:\etc',但不能同时。由于您使用的是Windows,因此可以忽略人们对cat所说的一切。您不想从STDIN复制,而是希望从文件中复制。

\copyCOPY也不是一回事。在您的情况下,您似乎想要COPY(无反斜杠),这是原始错误的来源。

答案 1 :(得分:0)

请注意,您只能使用' COPY .. FROM'通过在服务器中引用外部文件。我的意思是,postmaster实例必须可以访问该文件。

我总是在Linux中应用的一种技术是通过在psql之前发出一只猫来复制......来自STDIN&#39 ;.

查看参考指南: http://www.postgresql.org/docs/current/static/sql-copy.html

答案 2 :(得分:0)

我能够使这个陈述发挥作用:

COPY "Staging_Budget" FROM 'C:\Program Files (x86)\PostgreSQL\9.5\data\csv\RD - Facilities Management (001321).csv' (DELIMITER ',');

我猜postgres与STDIN一起使用的撇号有问题吗?此外,还需要将CSV文件放在Data文件夹中名为CSV的文件夹中。最后,我需要确保"(DELIMITER',')"在声明的最后 - 尽管参考指南说的是','是使用CSV文件时的默认设置...我不确定为什么必须明确说明它为分隔符。