我有一个包含各种数据格式的csv,我试图将其复制到postgres中。我每次都遇到这个错误,因为在第97789行我有几个空单元格的列。
我想找到一个将它们包含在数据库中的解决方案,而不是删除这一行(以及可能包含NULL值的其他行)。列ma effective date
应该采用整数值。但是当我尝试使用以下代码时 - 它不起作用,可能是因为我试图将NULL作为字符串输入:
oakland=# \copy test_import FROM '/Users/Downloads/IE670_test.csv' DELIMITER ',' NULL AS 'NULL' csv
ERROR: invalid input syntax for integer: " "
CONTEXT: COPY test_import, line 97789, column ma effective date (ccyymmdd): " "
但是,切换到NULL as NULL
也不起作用,并在psql
中产生语法错误。无论列中的数据类型如何,是否存在包含NULL值的有效解决方案?
以下是原始格式的违规行:
048A706200600,48A-7062-6 ,17,3,5815,PRESLEY WAY , ,OAKLAND ,94618, ," $102,150.00 "," $38,259.00 ", $- , $- , $- , $- , $- ," $7,000.00 ", $- ," $133,409.00 ",2015,139807,20150527,20150901, , , , , , , , , , , , ,1100,Single family residential homes used as such
答案 0 :(得分:2)
如果空值单元格确实为空,则省略NULL AS 'NULL'
子句。否则(看起来就是这种情况),将'NULL'
字符串替换为包含这些单元格中的内容的字符串。您可能需要确保csv中的空值是一致的。
test.csv(one-space null):
1, ,3
SQL
create table csv (one int, two int, three int);
一个空格为null:
\copy csv from '~/test.csv' delimiter ',' null as ' ' csv;
COPY 1
两个空格为null:
\copy csv from '~/test.csv' delimiter ',' null as ' ' csv;
ERROR: invalid input syntax for integer: " "
CONTEXT: COPY csv, line 1, column two: " "