在PostgreSQL中使用分隔符列表导入CSV数据

时间:2018-12-07 19:20:38

标签: sql database postgresql csv delimiter

我有一个csv文件,其数据类似“ 44444 521 hello”。 这里的景象是“ Tabulations”。

我想在名为“ TEST1”的表中导入csv数据,所以我这样做了:

\copy TEST(attribut1,attribut2,attribut3) FROM '/mnt/c/Users/user1/Desktop/data/test1.csv' WITH DELIMITER E'\t' CSV HEADER;

attribut1 =整数。 attribut2 =整数。 attribut3 = varchar(20)。

它说:

  

错误:整数的无效输入语法:“ 44444 521 hello”   上下文:COPY test1,第2行,列属性1:“ 4444444 521   你好“

感谢您的时间。

编辑

以下是十六进制编辑器中文件的屏幕截图:enter image description here

1 个答案:

答案 0 :(得分:0)

问题之所以出现,是因为您要指定CSV,从而激活postgres的csv导入规则。您的文件不会被制表符分隔;它在每行的开头和结尾都有"引号,在CSV模式下表示“数据的开始” /“数据的结束”,因此每行都被视为一个字段,其中的制表符被视为数据,而不是定界符

要么以文本模式导入(不指定CSV),要么以CSV模式导入,但指定另一个引号char(文件中不存在的char,1)以停止"被视为引号和2),因此不能将其他字符视为引号)

在任何一种情况下,您都必须删除引号"字符,以免后期处理-我认为您无法在复制数据时即时处理数据,因此必须将其加载到首先是一个临时表(所有varchar),然后除去引号并将其加载到实际表(REPLACE(data, '"', '')::int

或者,您可以文本编辑文件,然后从文件中删除"字符,然后再将其提供给Postgres