22004: null_value_not_allowed
PostgreSQL含义
在不接受 NULL 的地方传入了 NULL。这与列的 NOT NULL 约束(23502)不同;通常是在函数或过程上下文中,向不接受 NULL 的参数或操作传入了 NULL。属于 Class 22(data_exception)。
原因
给声明为 NOT NULL 的 PL/pgSQL 变量赋值 NULL;向 EXECUTE 传入 NULL 查询字符串;或向不接受 NULL 的内置函数参数传入 NULL。注意:标记为 STRICT 的函数在输入 NULL 时不会报错,而是不执行直接返回 NULL。
解决方法
找到出错的行(CONTEXT),对到达该处的值做 NULL 检查,或用 COALESCE 提供默认值:COALESCE(value, default_value)。在 PL/pgSQL 中,先校验值再赋给 NOT NULL 变量;在动态 SQL 中确保传给 EXECUTE 的字符串不为 NULL。在应用层防止必填字段以 NULL 发送。