2

对于这个 psql 的 \copy 命令,我一直收到“没有这样的文件或目录”的错误消息:

\copy household from '/home/kihong/hh.csv' with csv header;

你有什么建议吗?

4

1 回答 1

2

如果我是你,我会将文件移动到不同的文件夹(这对我有用)。我尝试从桌面上传我的 CSV 文件并收到您收到的错误消息。同样正如 Craig Ringer 建议的那样,使用 copy 而不是 \copy。

以下是有关如何将数据从电子表格(Excel 或 OpenOffice Calc)加载到 postgreSQL 的分步说明:

将电子表格页面保存为 CSV 文件。首选方法是在 OpenOffice Calc 上打开电子表格并进行保存。在“导出到文本文件”窗口中,选择字符集为 Unicode (UTF8)、字段分隔符:“,”和文本分隔符“”。将显示消息说只保存活动工作表。注意:此文件必须保存在文件夹中,但不能保存在桌面上,并且必须以 UTF8 格式保存(默认的 postgreSQL 是 UTF8 编码的升级)。如果保存在桌面上,postgreSQL 将给出“拒绝访问”消息并且不会上传。

在 PostgreSQL 中,创建一个与电子表格具有相同列数的空表。

注意:在每一列上,列名必须相同,数据类型必须相同。另外,请记住字符随足够字段而变化的数据长度。

然后在 postgreSQL 上,在 SQL 窗口上,输入代码:

复制 "ABC"."def" 从 E'C:\\tmp\\blabla.csv' delimiters ',' CSV HEADER;

注意:这里 C:\\tmp 是保存 CSV 文件“blabla”的文件夹。“ABC”.“def”是在 postgreSQL 上创建的表,其中“ABC”是模式,“def”是表。然后按顶部的绿色按钮执行“执行查询”。当 CSV 表在每列的开头都有标题时,需要“CSV HEADER”。

如果一切正常,则不会显示错误消息,并且 CSV 文件中的表数据将被加载到 postgreSQL 表中。但如果出现错误信息,请执行以下操作:

如果错误消息表明特定列的数据太长,则增加列大小。这主要发生在字符和字符变化列上。然后再次运行“执行查询”命令。

如果错误消息表明数据类型与特定列不匹配,则更改 postgreSQL 表列上的数据类型以匹配 CSV 表中的数据类型。

于 2012-10-04T06:37:12.580 回答