胡贝尔·‘depesz’·卢巴切夫斯基:等待PostgreSQL 19 – 为窗口函数添加IGNORE NULLS/RESPECT NULLS选项

💡 原文英文,约1200词,阅读约需5分钟。
📝

内容提要

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值的评估,从而提高查询效率。

➡️

继续阅读