Postgres COPY具有多种空可能性



我正在使用SQL命令将CSV文件复制到Postgres中,该文件有两种不同的可能性,我想将其视为null。第一个只是一个空白(两个连续的逗号(。第二个是字符串";PrivacySuppressed";。

我尝试过导入CSV,如下所示:

COPY c2c.field FROM 'my_csv.csv' NULL AS 'PrivacySuppressed' HEADER csv;

这里的问题是,尽管PrivacySuppressed被转换为null,但空白被视为空白字符串,我得到了以下错误:

ERROR:  invalid input syntax for type integer: ""

如何导入这样一个具有多种NULL可能性的CSV?我可以通过剥离PrivacySuppressed字符串来修改原始CSV,但我希望将其保留在数据中(这样,如果我们决定更改应用程序,我们仍然可以访问它(。

一个例子:

cat csv_null_test.csv 
1,,9
2,"19","5"
3,"PrivacySuppressed","5"
4,"19","15"
5,"19","5"
create table csv_null_test(id integer, fld_1 varchar, fld_2 integer);
copy csv_null_test from 'csv_null_test.csv' with(format 'csv');
COPY 5
pset null
Null display is "NULL".
select * from csv_null_test ;
id |       fld_1       | fld_2 
----+-------------------+-------
1 | NULL              |     9
2 | 19                |     5
3 | PrivacySuppressed |     5
4 | 19                |    15
5 | 19                |     5
(5 rows)
update csv_null_test set fld_1 = nullif(fld_1, 'PrivacySuppressed') where fld_1 = 'PrivacySuppressed' ;
UPDATE 1
select * from csv_null_test ;
id | fld_1 | fld_2 
----+-------+-------
1 | NULL  |     9
2 | 19    |     5
4 | 19    |    15
5 | 19    |     5
3 | NULL  |     5

相关内容

  • 没有找到相关文章

最新更新