使用psql复制csv时包含NULL值

时间:2016-12-23 05:11:59

标签: sql postgresql csv psql

我有一个包含各种数据格式的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

1 个答案:

答案 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: " "
相关问题