将S3存储桶CSV文件加载到RDS PostgreSQL时如何识别\N空值
问题根因
PostgreSQL原生CSV导入规则默认仅会将未被引号包裹的空值标识识别为NULL,你场景中文本、时间戳字段的空值标识为带引号的"\N",因此无法被默认规则判定为空值,数值、布尔类型的空值标识为无引号的\N,所以可以正常识别。
解决方案
在导入参数中添加PostgreSQL COPY命令支持的FORCE_NULL参数,指定所有文本、时间戳类型的列,即可强制将这些列中无论是否带引号的空值标识都识别为NULL。
修改后的命令示例如下(请将FORCE_NULL括号内的列名替换为你自己表中对应的文本、时间戳列):
SELECT aws_s3.table_import_from_s3 ( 'public.tabletest', '', '(FORMAT csv, HEADER true, DELIMITER '','', NULL ''\N'', FORCE_NULL (文本列1, 文本列2, 时间戳列1, 时间戳列2))', 'my_bucket_name_only', 'ciao/hello/filename.csv', 'eu-west-1' );
注意事项
FORCE_NULL参数仅对指定列生效,不会影响原有数值、布尔类型字段的空值识别逻辑- 若需要批量指定多个列,直接在
FORCE_NULL的括号内用逗号分隔列名即可
内容的提问来源于stack exchange,提问作者Tarun
相关产品推荐
相关产品推荐

