带有两个 NULL 字符串的 PostgreSQL COPY CSV
PostgreSQL COPY CSV with two NULL strings
我有一个来自 Web 查询的 csv 文件源,其中包含一个字符串的两个变体,我想在复制到 PostgreSQL table 时将其 class 设为 NULL。
例如
COPY my_table FROM STDIN WITH CSV DELIMITER AS ',' NULL AS ('N/A', 'Not applicable');
我知道此查询会引发错误,所以我正在寻找一种方法来在 COPY CSV 查询中指定两个单独的 NULL 字符串?
我认为在这种情况下最好的选择是将 NULL
字符串参数设置为其中之一,因为 COPY
不支持多个 NULL
字符串,然后,全部加载完成后,执行 UPDATE
操作,将您希望将其他 NULL
字符串设置为实际 NULL
值的任何列中的值(确切的查询将取决于哪些列可以有那些值)。
如果你有一堆列,你可以在你的 SET
子句中使用 CASE
语句到 return NULL
如果它匹配你的特殊字符串,或者否则价值。 NULLIF
也可以使用(这样会更紧凑)。例如NULLIF(col1, 'Not applicable')
我有一个来自 Web 查询的 csv 文件源,其中包含一个字符串的两个变体,我想在复制到 PostgreSQL table 时将其 class 设为 NULL。
例如
COPY my_table FROM STDIN WITH CSV DELIMITER AS ',' NULL AS ('N/A', 'Not applicable');
我知道此查询会引发错误,所以我正在寻找一种方法来在 COPY CSV 查询中指定两个单独的 NULL 字符串?
我认为在这种情况下最好的选择是将 NULL
字符串参数设置为其中之一,因为 COPY
不支持多个 NULL
字符串,然后,全部加载完成后,执行 UPDATE
操作,将您希望将其他 NULL
字符串设置为实际 NULL
值的任何列中的值(确切的查询将取决于哪些列可以有那些值)。
如果你有一堆列,你可以在你的 SET
子句中使用 CASE
语句到 return NULL
如果它匹配你的特殊字符串,或者否则价值。 NULLIF
也可以使用(这样会更紧凑)。例如NULLIF(col1, 'Not applicable')