使用node-vertica查询Vertica时ROUND函数遇0/null报错:Schema 'pg_catalog'不存在
解决node-vertica查询Vertica时ROUND(null)触发"pg_catalog不存在"的错误
问题核心
用node-vertica包查询Vertica时,当ROUND函数的参数为0/null(最终结果为null),会抛出ERROR: Schema "pg_catalog" does not exist错误,但移除ROUND后查询恢复正常。
修复方案
核心思路是避免让ROUND函数直接处理null值,以下是两种可行写法:
用COALESCE将null转为合法数值
把可能为null的计算结果先转为0(或其他你需要的默认值),再传入ROUND:SELECT name, email, ROUND(COALESCE(SUM(grade)/nullifzero(count(grade)), 0)) as average FROM il_grades GROUP BY name,email LIMIT 10子查询先计算平均值,再外层处理ROUND
先在子查询里算出允许为null的平均值,外层仅对非null值执行ROUND:SELECT name, email, CASE WHEN average_val IS NOT NULL THEN ROUND(average_val) ELSE NULL END as average FROM ( SELECT name, email, SUM(grade)/nullifzero(count(grade)) as average_val FROM il_grades GROUP BY name,email ) sub LIMIT 10
原因分析
node-vertica在处理ROUND返回null的场景时,内部错误触发了PostgreSQL兼容逻辑,尝试调用pg_catalog下的函数,但Vertica本身没有这个系统schema,因此抛出错误。移除ROUND后,null值直接返回,不会触发这个兼容逻辑的错误。
内容的提问来源于stack exchange,提问作者daniel gi
相关产品推荐
相关产品推荐

