Skip to main content
安装 VillageSQL 扩展,以向数据库添加自定义类型、函数和功能。

命令语法

提供 VERSION 时,服务器会打开 {name}-{version}.veb, 将该版本与清单进行比较,如果两者不一致则中止安装:
省略该子句则安装 {name}.veb;或者,如果只存在带版本号的 VEB, 则安装唯一的 {name}-{version}.veb。请参阅 选择版本
扩展以 .veb(VillageSQL 扩展包)文件的形式分发,其中包含编译后的库和元数据。

选择版本

veb_dir 中的 VEB 文件可以命名为 {name}.veb(不带版本号)或 {name}-{version}.veb(带版本号)。要安装特定的带版本号 VEB,请添加 VERSION 子句:
使用 VERSION 时,服务器会打开 vsql_uuid-0.2.0.veb,并验证其 manifest.json 中的版本是否与 0.2.0 匹配。 不使用 VERSION 时,服务器按如下方式解析文件:
  • 如果 {name}.veb 存在,则安装它;版本从其 manifest.json 中读取。
  • 否则,如果恰好存在一个 {name}-{version}.veb,则安装它;文件名中的版本会与其 manifest.json 中的版本进行核对。
  • 否则,安装失败,您必须指定一个版本。
如果存在多个带版本号的 VEB 且不存在不带版本号的 VEB,则 INSTALL EXTENSION 会失败并报错 Multiple versions of extension '<name>' found in '<dir>'; specify a version with INSTALL EXTENSION <name> VERSION 'x.y.z'。请使用显式的 VERSION 子句重新运行。

扩展命名约定

VillageSQL 在不同的上下文中采用不同的命名约定:
  • SQL 命令: 使用下划线:INSTALL EXTENSION vsql_uuid
  • 仓库名称: 使用连字符:github.com/villagesql/vsql-uuid
  • 文件名: 使用下划线:vsql_uuid.veb
  • manifest.json: 使用下划线以匹配 SQL:"name": "vsql_uuid"
示例:

所需权限

INSTALL EXTENSIONUNINSTALL EXTENSIONALTER EXTENSIONEXTENSION_ADMIN 动态权限保护。这些语句会将本机扩展代码加载到正在运行的服务器中, 因此它们需要管理权限,非特权账户无法使用。 EXTENSION_ADMIN 是在全局范围(ON *.*)授予的动态权限:
为了向后兼容,SUPER 也被接受作为后备权限,因此已持有 SUPER 的账户 无需单独授权即可运行这些语句。 --initialize--initialize-insecure 创建的数据目录会直接将 EXTENSION_ADMIN 授予 root@localhost,因此新服务器无需手动授权。 就地升级现有数据目录时,每个持有 SUPER 的用户账户都会被授予 EXTENSION_ADMIN — 但仅当没有任何账户已持有该权限时才会如此,因此已升级过一次的服务器 在以后的升级中不会再次回填。保留的 mysql.* 系统账户被排除在外。 两种权限都不具备的账户会在任何扩展工作开始之前被拒绝:
以同样的方式撤销该权限:
撤销会立即生效,而不是在下次连接时生效。服务器会在每条扩展 DDL 语句上 对照账户的当前授权检查 EXTENSION_ADMIN/SUPER,因此现有会话在撤销后 不会保留该权限 — 它的下一条语句就会失败,并报出上面显示的相同 ERROR 1227 (42000)

先决条件

  • 正在运行的 VillageSQL Server 实例
  • 管理员权限(root 或同等权限)

安装内置扩展

与 VillageSQL 一起提供的内置扩展已位于 veb_dir 中。只需启用它们:

验证安装

输出:

测试功能

安装外部扩展

对于单独下载或构建的扩展:
在安装外部扩展之前,您的服务器必须配置 veb_dir。请参阅 配置 veb_dir

1. 复制 .veb 文件

找到服务器的扩展目录,然后将 .veb 文件复制到其中:

2. 安装扩展

要固定预期的版本(在 CI 或脚本化的部署中很有用),请包含 VERSION 子句:
如果清单报告的版本不同,则安装失败,并且不会注册任何内容:
这是后备文件路径(不存在 {name}-{version}.veb)— 它与前面显示的 Version mismatch in '<file>' 错误属于不同的代码路径,后者在 带版本号的文件本身存在时触发。

3. 验证安装

故障排除

有关更多故障排除信息,请参阅 管理扩展

后续步骤

管理扩展

监控和排除已安装扩展的故障

可用扩展

浏览您可以安装的扩展

创建扩展

构建您自己的扩展