You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何给PostgreSQL函数添加未使用的可选参数会返回Null?

问题分析:PostgreSQL函数添加可选参数后返回全Null结果

核心原因:STRICT属性的触发逻辑

你的函数带有STRICT(严格模式)修饰符,这个属性的规则是:只要函数的任意输入参数为NULL,PostgreSQL会直接返回NULL,完全跳过函数体内部的SQL执行逻辑。

当你添加arg VARCHAR DEFAULT NULL这个可选参数后,调用test()时相当于隐式传入了NULL作为arg的值,直接触发了STRICT规则——函数根本没执行SELECT * FROM some_table,直接返回了NULL,表现为一条全Null的结果行。

验证与解决办法

  • 验证逻辑:如果调用时传入非NULL值,比如test('任意非空字符串'),函数会正常返回some_table的记录,因为此时参数不为NULL,不会触发STRICT的直接返回机制。
  • 解决方案:
    • 若需要保留可选参数且允许默认NULL时正常执行函数体,移除函数定义中的STRICT修饰符;
    • 若必须保留STRICT,可以修改参数默认值为非NULL(比如DEFAULT ''),或者调用时显式传入非NULL参数。

补充说明

STRICT适合那些输入NULL就必然返回NULL的函数场景,但如果你的函数逻辑不需要依赖参数(哪怕参数为NULL也要执行内部查询),这个修饰符就不适用。

内容的提问来源于stack exchange,提问作者machineghost

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 22:47:01