代码之家  ›  专栏  ›  技术社区  ›  machineghost

为什么在PostgreSQL函数中添加一个(未使用的)参数会使其返回Null?

  •  1
  • machineghost  · 技术社区  · 12 月前

    我有一个PostgreSQL函数:

    CREATE OR REPLACE FUNCTION test()
    RETURNS some_table
    LANGUAGE sql STABLE STRICT SECURITY DEFINER
    AS $function$
      SELECT * FROM some_table ;
    $function$;
    

    它工作得很好,并返回来自的记录 some_table 正如预期的那样。但是,如果我写 完全一样 query,除了我添加了一个可选参数:

    CREATE OR REPLACE FUNCTION test(arg VARCHAR DEFAULT NULL)
    

    该函数返回以下单个结果:

    null | null | null | null | null | null
    

    有人能解释一下原因吗?据我所知,这是一个未被使用的论点( 尤其地 一个与a DEFAULT )甚至不应该对函数或其查询产生任何影响。

    1 回复  |  直到 12 月前
        1
  •  2
  •   klin    12 月前

    根据the documentation :

    STRICT表示每当函数的任何参数为null时,函数总是返回null。如果指定了此参数,则当参数为空时,函数不会执行;相反,会自动假设结果为空。

    请注意 strict 没有参数的函数的参数无效。