确定 UDx 签名是否已更改

对包含已部署到 Vertica 数据库的函数的 UDx 库进行更改时,您需要小心操作。部署新版本的 UDx 库时,Vertica 无法确保在该库中定义的函数的签名与已在 Vertica 编录中定义的函数的签名匹配。如果您更改了库中的 UDx 的签名,然后在 Vertica 数据库中更新了该库,则对已更改的 UDx 发出的调用会生成错误。

对 UDx 进行以下任何更改会更改其签名:

  • 更改函数(不包括多态函数)所接受的参数个数,或更改所接受的任何参数的数据类型。

  • 更改任何返回值或输出列的个数或数据类型。

  • 更改 Vertica 用来为函数代码创建实例的工厂类的名称。

  • 更改函数的空值处理行为或可变性行为。

  • 从库中完成移除函数的工厂类。

以下更改不会更改函数的签名,也不要求在更新库之前删除函数。

  • 更改由多态函数处理的参数的个数或类型。Vertica 不会处理用户传递到多态函数的实参。

  • 更改函数所接受的参数的名称、数据类型或个数。函数所接受的参数不由函数签名决定。相反,Vertica 会传递用户包含到函数调用中的所有函数,而函数会在运行时传递这些参数。有关参数的详细信息,请参阅 UDx 参数

  • 更改由函数执行的任何内部处理。

  • 将新的 UDx 添加到库中

删除签名已更改的任何函数之后,您可以加载新的库文件,然后重新创建已更改的函数。如果未对 UDx 的签名进行任何更改,则您只需在 Vertica 数据库中更新库文件即可,而无需删除或更改函数定义。只要 Vertica 编录中的 UDx 定义与库中的函数的签名匹配,函数调用就可以在更新库之后以透明方式工作。请参阅部署 UDx 库的新版本