postgresql如何让COPY自动解释格式化的数字字段?

时间:2013-04-19 17:21:06

标签: postgresql sqlbulkcopy

我有一个包含以下内容的输入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)?

非常感谢。

2 个答案:

答案 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

我认为您最好的选择是从您的来源获得更好的格式化输出。