此查询不起作用,但错误没有意义
SELECT count(*) FROM t
WHERE json_typeof(info->'vatids')='array' AND json_array_length(info->'vatids')>1;
错误:无法获取标量的数组长度
PS:与 JSONb 同上。
此查询不起作用,但错误没有意义
SELECT count(*) FROM t
WHERE json_typeof(info->'vatids')='array' AND json_array_length(info->'vatids')>1;
错误:无法获取标量的数组长度
PS:与 JSONb 同上。
您没有向我们展示该列中的数据,也没有向我们展示表定义。但我猜你有这样的事情:
SQL 中没有条件“短路”,WHERE 子句中的所有条件都同时应用(逻辑上),因此
json_array_length(info->'vatids')
即使您也有,第三行也会失败json_typeof(info->'vatids')='array'
。以下也不会起作用,因为优化器足够聪明,可以将条件推送到派生表中:
在这种情况下,您需要一个完全过滤掉无效行的 CTE,然后才能将条件应用于数组长度:
这是因为 Postgres 中的 CTE 充当优化围栏,因此来自外部查询的条件不会被推送到 CTE。大多数时候这是一个缺点,但在这种情况下它确实很有帮助。