我有一个包含以下内容的输入CSV文件:
SD-32MM-1001,"100.00",4/11/2012
SD-32MM-1001,"1,000.00",4/12/2012
我试图COPY将其导入postgresql表(varchar,float8,date)并遇到错误:
# copy foo from '/tmp/foo.csv' with header csv;
ERROR: invalid input syntax for type double precision: "1,000.00"
Time: 1.251 ms
除了预处理输入文件之外,PG中是否有一些设置会让它读取上面的文件并在COPY中转换为数字形式? COPY以外的东西?
如果需要预处理,是否可以将其设置为COPY命令的一部分? (不是psql \copy
)?
非常感谢。
答案 0 :(得分:3)
预处理的选项是首先将文本复制到临时表。从那里使用to_number函数插入到权威表中:
select to_number('1,000.00', 'FM000,009.99')::double precision;
答案 1 :(得分:2)
这是一个奇怪的CSV文件,用双引号括起数字值,但保留了SD-32MM-1001
之类的值。事实上,我不确定我是否曾经看过这样的CSV文件。
如果我在你的鞋子里,我会针对这样格式的文件尝试copy
。
"SD-32MM-1001",100.00,4/11/2012
"SD-32MM-1001",1000.00,4/12/2012
请注意,数字没有逗号。我能够使用
成功导入该文件copy test from '/fullpath/test.dat' with csv
我认为您最好的选择是从您的来源获得更好的格式化输出。