You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL COPY命令导入时如何区分空字符串与NULL值

问题原因

你用的是COPY默认的TEXT解析格式,这个格式里双引号只是普通字符,不会被识别为字段值的包裹标记,也没法通过写法区分空字符串和NULL,才会导致你传的""被误判成NULL,触发非空约束报错。

正确配置方案

要实现""解析为空字符串、无内容的空字段解析为NULL的效果,需要切换到CSV解析模式并显式指定匹配规则,修改后的COPY命令如下:

COPY test_table (id, col1, col2) FROM stdin WITH (
    FORMAT CSV,
    DELIMITER ',',
    QUOTE '"',
    NULL ''
);

参数说明

  • FORMAT CSV:开启CSV解析模式,这个模式支持用引用符包裹字段值,原生支持区分被包裹的实际值和空值
  • DELIMITER ',':指定逗号为字段分隔符,和你之前的配置一致
  • QUOTE '"':指定双引号作为字段引用符,所有被双引号包起来的内容都会按实际字符串解析,不会被识别成NULL
  • NULL '':规则是没被引用符包着的空内容(也就是两个逗号中间啥都没有的,,形式)才会被解析为NULL;被双引号包着的空内容""会被识别成长度为0的空字符串,正好符合你的需求。

注意事项

你原来写的测试数据里""前面多了个空格,这个空格会被算成字段值的一部分,最后col1解析出来会是 ""(一个空格加两个双引号),如果要拿到纯空字符串,要把字段前后多余的空格删掉,正确的输入数据写法是:

1,"",,
2,"",,

用上面的配置执行,id会拿到1、2,col1是空字符串,col2是NULL,不会再报非空约束的错误。

内容的提问来源于stack exchange,提问作者pikk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 20:42:16