UDx 库与新服务器版本的兼容性
Vertica SDK 定义了一个应用程序编程接口 (Application Programming Interface, API),UDx 可使用该 API 与数据库交互。当开发人员编译其 UDx 代码时,该代码会链接到 SDK 代码以形成一个库。此库仅与支持用于编译该代码的 SDK API 版本的 Vertica 服务器兼容。使用相同 API 版本的库和服务器在二进制级别是兼容的(此兼容性称为“二进制兼容”)。
如果您尝试加载与 Vertica 服务器不具有二进制兼容性的库,服务器会返回错误消息。同样,如果将 Vertica 服务器升级到支持新的 SDK API 的版本,任何依赖新的不兼容库的现有 UDx 会在您向其发出调用时返回错误消息:
ERROR 2858: Could not find function definition
HINT:
This usually happens due to missing or corrupt libraries, libraries built
with the wrong SDK version, or due to a concurrent session dropping the library
or function. Try recreating the library and function
要解决此问题,您必须安装已使用正确的 SDK 版本重新编译的 UDx 库。
新版本的 Vertica 服务器并不总会更改 SDK API 版本。只要 Micro Focus 更改了构成 SDK 的组件,SDK API 版本就会更改。如果 SDK API 在新版本的服务器中未更改,旧库会继续与新服务器兼容。
当 Micro Focus 扩展 SDK 的功能时,SDK API 几乎总是在 Vertica 版本(主要版本、次要版本、服务包)中发生更改。Vertica 绝不会在修补程序补丁中更改 API。
这些策略意味着您必须在主要版本之间升级时更新 UDx 库。例如,如果从版本 10.0 升级到 10.1,则必须更新 UDx 库。
注意
用脚本语言编写的 UDx 没有已编译的二进制文件,因此不需要维护从一个版本到另一个版本的二进制文件兼容性。仅当 SDK 中使用的 API 实际发生更改时,以脚本语言编写的 UDx 才会变得不兼容。例如,如果传递到 API 调用的实参个数发生更改,您必须更改 UDx 才能使用新的实参个数。升级前步骤
升级 Vertica 服务器之前,应考虑是否存在任何与新版本不兼容的 UDx 库。请参阅新的服务器版本的发行说明,以确定 SDK API 在当前已安装的 Vertica 服务器版本和新版本之间是否已更改。如前文所述,只有从前一个主要版本升级或从某个主要版本的初始发行版升级到某个服务包发行版时,才会导致当前已加载的 UDx 库变为与服务器不兼容。
必须重新编译与新版本 Vertica 服务器不兼容的任何 UDx 库。如果 UDx 库之前是从第三方获取的,您必须检查该库是否已发布新版本。如果是这样,请在升级服务器后部署新版本(请参阅部署 UDx 库的新版本)。
如果 UDx 是您自己开发的(或者如果您有源代码),则您必须执行下列操作:
-
使用新版本的 Vertica SDK 重新编译 UDx 库。有关详细信息,请参阅编译 C++ 库或编译并打包 Java 库。
-
部署新版本的库。请参阅部署 UDx 库的新版本。