Postgres:检查函数输入数组是否为null或为空或包含null

时间:2018-04-25 19:06:55

标签: postgresql

我希望验证参数输入以检查,例如,_product_ids :: BIGINT []不为null,或者不包含null(或者可选地,不包含null),或者不为空。< / p>

这就是我所拥有的:

IF (
  _product_ids IS NULL -- Is null
  OR -1 = ANY(_product_ids) IS NULL -- Contains null
  OR COALESCE(ARRAY_LENGTH(_product_ids, 1) < 1, TRUE) -- Is empty
) THEN
  RAISE EXCEPTION 'INPUT IS INVALID';
END IF;

我想调整一下&#39;包含null&#39;这样只有在只有空值时它才会返回true。另外,我想知道是否有办法同时检查null和empty数组。

使用PostgresSQL 9.6。

1 个答案:

答案 0 :(得分:1)

表达式可能如下所示:

_product_ids is null -- is null
or cardinality(_product_ids) = 0 -- is empty
or (select bool_and(e is null) from unnest(_product_ids) e) -- contains only nulls