胡贝尔·‘depesz’·卢巴切夫斯基:等待PostgreSQL 19 – 为窗口函数添加IGNORE NULLS/RESPECT NULLS选项
内容提要
2025年10月3日,石井达夫提交补丁,为窗口函数添加IGNORE NULLS/RESPECT NULLS选项,影响lead、lag等函数的NULL值处理,默认为RESPECT NULLS。新API提高性能,避免重复评估NULL行。
关键要点
-
2025年10月3日,石井达夫提交补丁,为窗口函数添加IGNORE NULLS/RESPECT NULLS选项。
-
该选项影响lead、lag、first_value、last_value和nth_value等窗口函数的NULL值处理,默认为RESPECT NULLS。
-
IGNORE NULLS选项会忽略NULL值,而RESPECT NULLS会将NULL值包含在结果计算中。
-
内置窗口函数修改为调用新API WinCheckAndInitializeNullTreatment(),以指示是否接受IGNORE NULLS/RESPECT NULLS选项。
-
当允许NULL处理且给定IGNORE NULLS选项时,相关函数将返回指定非NULL行的参数表达式。
-
为提高性能,创建了2位非NULL信息数组,以记住行是否已被评估为NULL或非NULL。
-
通过跳过已评估的行,可以减少重复评估,从而提高性能。
-
示例查询展示了IGNORE NULLS选项如何去除几乎所有输出中的NULL值。
延伸问答
PostgreSQL 19中窗口函数的IGNORE NULLS/RESPECT NULLS选项有什么作用?
该选项影响窗口函数对NULL值的处理,IGNORE NULLS会忽略NULL值,而RESPECT NULLS会将NULL值包含在结果计算中。
如何提高PostgreSQL窗口函数的性能?
通过创建2位非NULL信息数组来记住行是否已被评估为NULL或非NULL,从而减少重复评估,提高性能。
在PostgreSQL中,如何使用IGNORE NULLS选项?
在窗口函数查询中添加IGNORE NULLS选项,可以去除输出中的几乎所有NULL值。
PostgreSQL窗口函数的默认NULL处理方式是什么?
默认情况下,窗口函数的NULL处理方式为RESPECT NULLS,即包含NULL值在内的结果计算。
新API WinCheckAndInitializeNullTreatment()的作用是什么?
该API用于指示窗口函数是否接受IGNORE NULLS/RESPECT NULLS选项,并在执行时进行相应处理。
使用窗口函数时,如何处理NULL值以提高查询效率?
可以使用IGNORE NULLS选项来跳过NULL值的评估,从而提高查询效率。