我有一个包含各种数据格式的 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
最佳答案
如果空值单元格确实为空,则省略 NULL AS 'NULL'
子句。否则(似乎是这种情况),将 'NULL'
string 替换为包含这些单元格中任何内容的字符串。您可能需要确保 csv 中的空值是一致的。
test.csv(一个空格为空):
1, ,3
SQL
create table csv (one int, two int, three int);
一个空格为空:
\copy csv from '~/test.csv' delimiter ',' null as ' ' csv;
COPY 1
两个空格为空:
\copy csv from '~/test.csv' delimiter ',' null as ' ' csv;
ERROR: invalid input syntax for integer: " "
CONTEXT: COPY csv, line 1, column two: " "
关于sql - 使用 psql 复制 csv 时包括 NULL 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41295519/