
Gel 扩展管理深入掌握gel extension list命令与独立扩展的安装生命周期【免费下载链接】edgedbGel supercharges Postgres with a modern data model, graph queries, Auth AI solutions, and much more.项目地址: https://gitcode.com/gh_mirrors/ed/edgedbgel extension list是 Gel 命令行工具gelCLI中用于列出当前数据库实例已安装扩展的核心命令。本文以该命令为切入点完整讲解其语法、连接选项、输出格式并结合仓库源码剖析扩展在 Gel 内部的数据模型ExtensionPackage同时串联list-available、install、uninstall、instance restart与 schema 中using extension声明的完整生命周期帮助你从会敲命令进阶到理解原理。命令总览gel extension list能做什么在 Gel 中扩展extension是给数据库增加额外能力的标准途径。扩展既可以带来新的类型、标量类型、函数更重要的是可以引入全新的与数据库交互的方式例如 GraphQL、EdgeQL over HTTP、Auth、AI 等。扩展分为两类见 docs/reference/datamodel/extensions.rst内置扩展built-in extensions随 Gel 一起分发通过 schema 顶层using extension name;语句启用例如edgeql_http、graphql、auth、ai、pg_trgm、pg_unaccent、pgcrypto、pgvector独立扩展包standalone extensions以独立安装包形式存在只能通过 CLI 在本地项目管理的实例上安装postgis是最典型的代表也是各命令示例中的主角。gel extension list负责回答一个问题当前实例上已经装好了哪些独立扩展、各自是什么版本。它与gel extension list-available列出可安装的扩展互为对照是确认安装结果、排查问题的第一步。语法与全局选项根据 list.rst 的定义命令语法为gel extension list [options]该命令本身不接收位置参数可用的选项全部来自 Gel CLI 的全局连接选项Connection options用于指定要查询哪个实例/数据库相关完整说明见 gel_connopts.rst。也就是说凡是gel命令通用的--instance、--dsn、--database、--user、--password、--tls-*等连接参数对gel extension list同样适用——这一点在gel extension命令组内所有子命令中是一致的见 index.rst。命令组结构gel extension是一个命令组共包含四个子命令见 index.rst子命令说明gel extension list列出已安装的扩展gel extension list-available列出可安装的扩展gel extension install安装一个扩展gel extension uninstall卸载一个扩展输出格式解读一张两列的表运行命令后CLI 会以表格形式输出当前实例已安装的独立扩展每行包含两列Name扩展名与Version版本号。官方文档给出的输出示例为$ gel extension list ┌─────────┬───────────────┐ │ Name │ Version │ │ postgis │ 3.4.36b82d77 │ └─────────┴───────────────┘几点值得注意Version 格式版本号形如3.4.36b82d77即上游版本号 提交标识。这对应源码中ExtensionPackage.version字段的类型——verutils.Version见 edb/schema/extensions.py它不仅能表达普通的语义化版本还支持携带构建/提交后缀便于精确定位扩展包来源。空结果也是合法输出当实例上尚未安装任何独立扩展时命令同样正常返回只是表格的 Name 与 Version 两列之间没有数据行extensions.rst 中展示了空表形态。只展示独立扩展内置扩展如graphql、auth不通过 CLI 安装因此不会出现在gel extension list的输出中——它们用using extension在 schema 中声明启用。与list-available的对照已装 vs 可装gel extension list的姊妹命令gel extension list-available用于查询当前可以从扩展仓库获取的独立扩展包见 list-available.rst$ gel extension list-available ┌─────────┬───────────────┐ │ Name │ Version │ │ postgis │ 3.4.36b82d77 │ └─────────┴───────────────┘两者输出结构完全一致同样的 Name/Version 两列但语义不同gel extension list实例上已安装的扩展gel extension list-available仓库中可安装的扩展。实践中的典型用法是先用list-available确认候选扩展及其版本再用install安装最后用list核验安装结果构成查询 → 安装 → 核验的完整闭环。独立扩展的完整生命周期list 在其中扮演的角色要真正用好gel extension list需要把它放进独立扩展的完整生命周期里理解。官方文档 extensions.rst 给出了标准流程1. 查看可安装的扩展$ gel extension list-available2. 安装扩展$ gel extension install postgis Found extension package: postgis version 3.4.36b82d77 00:00:03 [] 22.49 MiB/22.49 MiB Extension postgis installed successfully.注意install命令带一个必填位置参数extension扩展名安装过程会先输出找到的扩展包版本随后显示下载进度条示例中为 22.49 MiB 的包最后确认安装成功见 install.rst。3. 核验安装结果list 的用武之地$ gel extension list ┌─────────┬───────────────┐ │ Name │ Version │ │ postgis │ 3.4.36b82d77 │ └─────────┴───────────────┘4. 重启实例使扩展生效$ gel instance restart这一步不能省略——安装独立扩展包后必须重启实例才能让扩展真正可用。这也意味着gel extension list的查询结果是基于实例当前运行状态的真实反映。5. 在 schema 中声明使用独立扩展安装并重启后就可以像内置扩展一样在 schema 顶层声明使用using extension postgis;需要强调的约束是扩展声明必须位于任何module块之外因为扩展作用于整个数据库branch而非某个特定模块。6. 卸载扩展$ gel extension uninstall postgis Extension postgis uninstalled successfully.uninstall与install一样接受必填位置参数extension见 uninstall.rst。一个重要的运维注意事项官方文档明确提示要恢复restore一份使用了独立扩展的 dump必须在恢复流程开始之前先安装该扩展。这与gel extension list直接相关——在gel restore之前执行gel extension list可以快速确认目标实例是否已具备恢复所需的扩展环境。源码视角ExtensionPackage与版本号背后的实现从源码层面看独立扩展在 Gel 内部被建模为一个全局对象ExtensionPackage见 edb/schema/extensions.py。该类的核心字段恰好解释了gel extension list输出与扩展行为字段类型说明versionverutils.Version扩展版本即list输出中的 Version 列支持3.4.36b82d77这类带提交后缀的版本scriptstr扩展主体脚本sql_extensionsFrozenCheckedSet[str]扩展依赖的一组 SQL 扩展名sql_setup_scriptstr安装扩展时执行的 SQL 设置脚本sql_teardown_scriptstr卸载扩展时执行的 SQL 清理脚本ext_modulestr扩展对应的模块名dependenciesFrozenCheckedSet[str]扩展的依赖项当前以字符串形式存储为将来携带版本信息预留空间从源码结构可以推断gel extension list展示的正是这些ExtensionPackage全局对象及其version字段的投影而install/uninstall命令在底层则分别对应创建/删除这样的全局对象并配套执行sql_setup_script/sql_teardown_script来完成 PostgreSQL 侧的安装与清理。这也是为什么安装后需要重启实例、以及 dump 恢复前必须预先安装扩展——因为扩展的 SQL 对象与数据库底层结构深度绑定。注ExtensionPackage类中的注释还提醒作为GlobalObject其数据存放在全局 JSON 中而非通过反射 schema 存储新增字段时需要同步更新pgsql/delta.py与 metaschema 中对应的存储/读取逻辑——这属于深入扩展机制的实现细节普通使用者无需关心。低层 DDLcreate extension/drop extension了解底层 DDL 有助于阅读迁移migration脚本。gel extension命令组管理的是扩展包而真正在 schema 中启用/停用扩展的是两条低层 DDL 语句见 extensions.rstcreate extension ExtensionName;为当前数据库5.0 起为 branch启用指定扩展例如create extension graphql;、create extension edgeql_http;drop extension ExtensionName;停用当前激活的扩展例如drop extension graphql;。日常使用中通常不需要直接执行这两条语句但了解它们能让你在审阅迁移文件时看懂扩展启停是如何被记录与回放的。小结与快速参考围绕gel extension list一张速查表收束全文场景命令查看已安装的独立扩展gel extension list查看可安装的独立扩展gel extension list-available安装扩展gel extension install extension卸载扩展gel extension uninstall extension安装后使扩展生效gel instance restart在 schema 中启用扩展using extension ExtensionName;核心要点回顾gel extension list输出两列Name / VersionVersion 形如3.4.36b82d77对应源码中ExtensionPackage.version字段它只反映独立扩展包内置扩展通过using extension声明不会出现在列表中独立扩展的标准流程是list-available → install → list核验→ instance restart → using extension恢复 dump 前必须先用list确认扩展环境就绪所有gel extension子命令共享 Gel CLI 的全局连接选项详见 gel_connopts.rst。更多背景可继续阅读 扩展数据模型文档 与 gel extension 命令组索引或在源码 edb/schema/extensions.py 中深入ExtensionPackage的实现细节。【免费下载链接】edgedbGel supercharges Postgres with a modern data model, graph queries, Auth AI solutions, and much more.项目地址: https://gitcode.com/gh_mirrors/ed/edgedb创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考