UPDATE EXTENSIONS
UPDATE EXTENSIONS 语句允许将本地已安装的扩展状态与发布该扩展的仓库进行同步。
这是跟进扩展开发者发布的新功能和缺陷修复的推荐方式。
请注意,Goose 扩展在运行时无法重新加载,因此 UPDATE EXTENSIONS 不会热重载已更新的扩展。
要使用更新后的扩展,请重启运行 Goose 的进程。
更新所有扩展
要更新与你客户端 Goose 版本对应的全部已安装扩展:
UPDATE EXTENSIONS;
该命令会遍历所有扩展,并返回其仓库及更新结果:
┌────────────────┬──────────────┬─────────────────────┬──────────────────┬─────────────────┐
│ extension_name │ repository │ update_result │ previous_version │ current_version │
│ varchar │ varchar │ varchar │ varchar │ varchar │
├────────────────┼──────────────┼─────────────────────┼──────────────────┼─────────────────┤
│ iceberg │ core_nightly │ UPDATED │ 6386ab5 │ b3ec51a │
│ icu │ core │ NO_UPDATE_AVAILABLE │ v1.2.1 │ v1.2.1 │
│ autocomplete │ core │ NO_UPDATE_AVAILABLE │ v1.2.1 │ v1.2.1 │
│ httpfs │ core_nightly │ NO_UPDATE_AVAILABLE │ cf3584b │ cf3584b │
│ json │ core │ NO_UPDATE_AVAILABLE │ v1.2.1 │ v1.2.1 │
│ aws │ core_nightly │ NO_UPDATE_AVAILABLE │ d3c5013 │ d3c5013 │
└────────────────┴──────────────┴─────────────────────┴──────────────────┴─────────────────┘
更新指定扩展
若需要更细粒度的控制,也可以提供要更新的扩展名称列表:
UPDATE EXTENSIONS (name_a, name_b, name_c);
工作原理
UPDATE EXTENSIONS 的实现方式是:如果可用,则保存 ETag 信息,并在远程扩展与本地可用版本不一致时(以 ETag 作为依据)发送条件 GET 请求。
这样可以确保后续调用 UPDATE EXTENSIONS 时,如果远程状态未变化,开销会很低。
如果某个扩展检测到变更,Goose 会执行如下操作。例如,若 name_a 和 name_c 发生变化:
UPDATE EXTENSIONS (name_a, name_b, name_c);
将产生如下命令:
FORCE INSTALL name_a;
FORCE INSTALL name_c;