PostgreSQL 18 中文参考文档(未翻译部分保留英文)🌐 切换到英文原版 →

10.3. 函数 #

确定某次函数调用具体对应哪一个物理函数的决议步骤如下:

函数类型推导流程

  1. 从系统目录 pg_proc 中检索待选函数。若为未限定的函数名,从当前搜索路径下检索名称和入参个数相符的可见函数;若显式指定了模式名,则仅检索指定模式下的函数。

  2. 寻找与传入实参类型完全精确匹配的函数。若找到唯一精确匹配,直接采用[9]。

  3. 若未找到精确匹配,检查该函数调用是否属于特殊的函数式类型转换请求(例如当入参仅为一个且函数名恰好与某个内部数据类型同名时,系统将其视为一种 CAST 语法糖处理)。

  4. 寻找最佳匹配函数:

    1. 剔除入参类型不匹配且无法通过隐式转换达成的候选。

    2. 若入参包含域类型(Domain),在后续推导步骤中将其平铺视为其底层基类型对待。

    3. 保留在入参类型上精确匹配项最多的候选者。

    4. 保留在需要执行类型转换的位置上能接受该类别首选类型(preferred type)最多的候选者。

    5. 对于未知类型字面量 unknown,优先选用字符串类别。



[9] 在包含不信任用户的模式搜索路径下调用函数需注意安全性。