具有多个空可能性的 Postgres COPY

Postgres COPY With Multiple Null Possibilities

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

我试过像这样导入 CSV:

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

这里的问题是,虽然PrivacySuppressed被转为null,但是把blank当成了空字符串,报错如下:

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