2014-11-03 56 views
0

我正在将csv文件导入到postgres中,并想知道如何在使用COPY命令时导入正确的数据类型。例如,我有一列column_1 integer;,并希望从我的csv文件中将值6插入到它中。将CSV文件导出到Postgres的数据更正

我运行命令copy "Table" from 'path/to/csv' DELIMITERS ',' CSV;并且每次我尝试这样做时出现错误ERROR: invalid input syntax for integer: "column_1"。我发现这是因为它会自动将csv文件中的每个数据作为字符串或文本导入。如果我将列类型更改为text,那么它可以成功运行,但是这会破坏使用数字的目的,因为我需要它来进行各种计算。传输时有没有办法保存数据类型?有什么我需要改变在CSV文件?还是有另一种数据类型分配给column_1?希望这是有道理的。提前致谢!

+1

尝试像从“路径/到/ CSV” WITH CSV标题这个'COPY“表”;' – 2014-11-03 06:48:19

+0

列中是否有很多'column_1'字符串或只有一列? – Houari 2014-11-03 09:11:49

+0

我有大约25行和25列都填充了我已经在电子表格中的数据,并且基本上只需复制和粘贴所有信息,而不必手动输入每个单元格。我也尝试过头部功能,并且遇到同样的问题。 – Luminusss 2014-11-03 16:44:29

回答

0

我做到这一点,它完美地工作: 我把普通号在stack.csv
(该stack.csv只有一个值6)

# create table stack(i int); 
# \copy stack from 'stack.csv' with (format csv); 

我在您的评论读你在您的CSV文件中有25列。你需要在你的桌子上至少有25列。所有列都需要从CSV映射。如果表中的列数超过25列,则只需要映射CSV的列即可。 这就是为什么它工作在text字段,因为所有数据放在一个行单元格中。

如果您有更多的列在您的CSV文件相比,格式为“田”就是这样

\copy stack(column1, column2, ..., column25) from 'stack.csv' with (format csv); 
+0

你到底在做什么?你介意解释为什么这是不同的 – Luminusss 2014-11-04 04:39:49

+0

我在你的评论中读到你的CSV文件中有25列。你需要在你的桌子上至少有25列。所有列都需要从CSV映射。如果表中的列数超过25列,则只需要映射CSV的列即可。如果你有**,**而不是默认的,所以我忽略它。其他事情不同:我没有在我的表格中引用引号,并且您的CSV文件的路径很模糊。你为什么从命令中忽略? – 2014-11-04 07:15:09