ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Gel CLI `gel database` 命令组详解:兼容旧版数据库管理命令的完整使用指南

Gel CLI `gel database` 命令组详解:兼容旧版数据库管理命令的完整使用指南 数据库图数据库关系型数据库【免费下载链接】edgedbGel supercharges Postgres with a modern data model, graph queries, Auth AI solutions, and much more.项目地址https://gitcode.com/gh_mirrors/ed/edgedb点击查看免费下载导读gel database是 Gel前身 EdgeDB命令行工具CLI中用于管理数据库的命令组包含创建create、删除drop与清空wipe三个子命令。本文以仓库中 gel_database 官方文档 为主线完整覆盖三个子命令的语法、选项与底层对应关系并结合仓库源码EdgeQL 语法解析器、PG 后端实现讲解其工作原理。读完本文你将能够在运行 EdgeDB 5.0 之前版本的实例上熟练执行数据库的创建、删除与内容清空操作理解--non-interactive与--database/-d等连接选项的作用并明确何时应该迁移到新的gel branch命令组。重要提示本命令组在 Gel 中已被标记为弃用deprecated。EdgeDB 5.0 引入branches分支概念以取代 databases因此gel database系列命令仅对运行EdgeDB 5.0 之前版本的实例生效。若你使用更新版本的 Gel/EdgeDB应改用 gel branch 命令组。一、命令组概览gel database的定位与弃用背景gel database是 Gel CLI 的顶层命令组之一负责提供各种数据库操作工具。命令组由三个子命令构成官方文档中给出的完整命令清单如下子命令功能说明gel database create创建一个新的数据库Create a new databasegel database drop删除一个数据库Drop a databasegel database wipe清空一个数据库的内容Destroy the contents of a database为什么被弃用branches 取代 databases在 EdgeDB 5.0 中官方用branches分支概念替代了 databases。根据仓库中 branches 官方文档 的说明Gels branches are equivalent to PostgreSQLsdatabasesand map to them directly.即Gel 的分支与 PostgreSQL 的数据库等价并且直接映射到 PG 数据库。Gel 围绕分支提供了完整的工具链来构建开发工作流例如在本地开发时可以将 Gel 分支与 Git 分支一一对应在使用 Gel Cloud 和 GitHub 时可以做到每个 PR 一个分支。因此如果你正在使用 EdgeDB 5.0 或更高版本应当使用 gel branch 命令组 来管理分支其包含的命令比gel database更丰富gel branch 子命令功能说明gel branch create创建新分支gel branch drop删除分支gel branch list列出所有分支gel branch merge将分支合并进当前分支gel branch rebase基于目标分支创建分支gel branch rename重命名分支gel branch switch切换当前活动分支gel branch wipe清空分支内容从源码看Rust 实现的 CLI 入口在 edb/cli/main.py通过cli.rustcli()调用内置的 Rust CLI而gel branch提供的create/drop/wipe等能力正是对gel database同名命令的现代化替代。二、gel database create创建数据库命令语法gel database create [options] name功能说明gel database create是终端命令其行为等同于执行 EdgeQL 语句create database。该命令会在当前连接到的 Gel 实例上执行因此如何指定连接目标实例、数据库、用户等对命令行为有直接影响具体连接选项请参阅 连接选项文档。参数说明name新数据库的名称必填位置参数。使用示例在本地实例假设仍运行 EdgeDB 5.0 之前的版本上创建名为appdb的数据库gel database create appdb创建数据库时若未指定连接目标命令将连接到main数据库并以其所属实例为创建环境。源码印证EdgeQL 语法层面的实现在仓库的 EdgeQL 语法解析器中create database语句有完整的语法支持。见 edb/edgeql/parser/grammar/ddl.pyreduce_CreateDatabaseStmt第 722 行与reduce_DropDatabaseStmt第 726 行用于缩减语句CreateDatabaseStmt非终结符第 745 行起定义了规则CREATE DATABASE DatabaseName OptCreateDatabaseCommandsBlock并构造出qlast.CreateDatabase语法树节点。这说明gel database create所对应的create database语句是 EdgeQL 语言层面的标准 DDL 语句服务端会经过完整的编译链路语法解析 → IR → SQL 代码生成最终落到 PostgreSQL 的数据库创建上。三、gel database drop删除数据库命令语法gel database drop [options] name功能说明gel database drop是终端命令其行为等同于执行 EdgeQL 语句drop database。命令在当前连接的 Gel 实例上执行连接目标的指定方式同样参见 连接选项文档。参数说明参数说明name要删除的数据库名称必填位置参数--non-interactive无需确认直接删除数据库。默认情况下命令会先询问用户确认加上该选项后跳过确认环节使用示例删除数据库appdb并跳过确认提示gel database drop --non-interactive appdb如果省略--non-interactiveCLI 会先显示确认提示等待用户确认后才真正执行删除——这对于误删数据库是重要的安全防线。源码印证删除操作的底层流程删除数据库并非简单的一行 SQL。仓库中的 edb/tools/wipe.py 展示了底层清理数据库/角色时的真实 PG 操作序列其逻辑可作为drop类操作后端行为的参考命令会先查询pg_database/pg_roles获取数据库与角色的归属关系再依次执行SET ROLE、ALTER DATABASE ... IS_TEMPLATE false当目标是模板库时先取消模板属性、DROP DATABASE ...以及针对角色的REVOKE/DROP ROLE。由此可见Gel 的数据库删除操作需要同时处理数据库与相关角色的依赖关系而非仅执行一条DROP DATABASE语句。四、gel database wipe清空数据库内容命令语法gel database wipe [options]功能说明gel database wipe是终端命令其行为等同于执行 EdgeQL 语句reset schema to initial。该命令与drop的本质区别在于删除数据但保留数据库本身数据库的内容会被全部销毁schema 被重置为任何迁移migration之前的状态但数据库这一实体本身被保留下来。目标数据库的确定规则被清空的数据库按以下优先级取值——通过--database/-d选项传入的值环境变量DATABASE的值默认值main。参数说明参数说明--non-interactive无需确认直接销毁数据。默认会先询问确认加上该选项后跳过确认环节使用示例清空当前连接数据库的全部内容并将 schema 重置到初始状态gel database wipe --non-interactive或显式指定要清空的数据库gel database wipe --database appdb由于--database/-d与DATABASE环境变量都属于连接选项体系gel database wipe实际也是通过这些机制确定操作目标的。源码印证reset schema to initial的语言级支持在 edb/edgeql/parser/grammar/ddl.py 中ResetSchemaStmt非终结符第 3873 行起通过reduce_ResetSchemaTo规则构造qlast.ResetSchema语法树节点即reset schema to initial是 EdgeQL 语言内置的标准 DDL 语句gel database wipe只是它在 CLI 层面的封装。五、连接选项与向后兼容--database/-d与DATABASE环境变量gel database系列命令均在当前连接的实例上执行连接目标的指定方式统一参考 连接选项文档。其中与数据库/分支直接相关的选项要点如下依据该文档第 70~84 行的说明自 EdgeDB 5.0 起目标库通过BRANCH环境变量指定若未设置本地实例默认使用最近切换的分支或main分支远程实例默认使用创建链接时提供的名称包括通过gel project init创建的 Gel Cloud 实例链接。向后兼容机制在 EdgeDB 5.0 之前目标库被称为 database名称可通过以下两种方式指定命令行标志-d dbname、--databasedbname环境变量DATABASE。Gel 为了兼容旧脚本与既有习惯继续支持-d/--database标志与DATABASE环境变量因此gel database wipe文档中才会出现取值来自--database/-d选项、DATABASE环境变量或默认main的规则。这也解释了为什么gel database wipe没有name位置参数它的目标是当前连接所指向的数据库而该目标完全由连接选项体系决定相比之下create与drop则因为需要显式给出新建/删除对象的名字而保留name位置参数。六、迁移指南从gel database切换到gel branch如果你正在或计划升级到 EdgeDB 5.0 及以上版本请按下面的对应关系迁移你的脚本与工作流旧命令gel database新命令gel branch等价 EdgeQL 语句gel database create namegel branch create namecreate schema branch默认行为gel database drop namegel branch drop namedrop branchgel database wipegel branch wipe namereset schema to initial关于gel branch create的补充说明依据 gel_branch_create 文档默认情况下gel branch create name创建的新分支与当前分支由$CONFIG/credentials指定拥有相同 schema等价于create schema branch--from oldbranch指定新分支的基分支默认是当前分支-e, --empty创建无 schema、无数据的新分支--copy-data从基分支复制数据到新分支。而gel branch wipe与旧版gel database wipe行为一致销毁分支内容、将 schema 重置到迁移前状态但保留分支本身并支持--non-interactive跳过确认。七、实战要点与注意事项汇总版本判断先行执行任何gel database命令前先确认实例版本。EdgeDB 5.0 之后该命令组已弃用新版本会引导你使用gel branch。wipe与drop的区别wipe保留数据库实体、仅清空内容并重置 schema适合推倒重来的开发环境drop连数据库本身一并删除适合清理废弃库。交互确认是默认行为drop与wipe默认都会要求确认在 CI/CD 脚本或无人值守环境中必须显式加上--non-interactive否则命令会挂起等待输入。wipe的目标由连接体系决定--database/-d选项优先于DATABASE环境变量二者均未指定时默认作用于main数据库使用前务必核对当前连接目标避免清错库。create/drop是语言级 DDL 的 CLI 封装它们在服务端对应create database/drop database的完整 EdgeQL 编译链路语法解析删除操作在 PG 后端还会联动处理角色与依赖关系因此不要试图用裸 SQL 绕过这些命令。结语gel database命令组是 EdgeDB 5.0 之前版本中管理数据库的标准入口三个子命令create/drop/wipe分别对应create database、drop database与reset schema to initial三条语言级语句并借助--non-interactive与连接选项体系提供了安全的无人值守能力。随着 EdgeDB 5.0 引入 branches官方已将其整体迁移为功能更丰富的 gel branch 命令组。对于仍在维护旧版本实例的团队掌握gel database的命令语义与兼容选项-d/--database、DATABASE依然是平滑升级到新命令体系的前提。赞分享数据库图数据库关系型数据库【免费下载链接】edgedbGel supercharges Postgres with a modern data model, graph queries, Auth AI solutions, and much more.项目地址https://gitcode.com/gh_mirrors/ed/edgedb点击查看免费下载相关推荐Gel CLI 服务器版本管理gel server list-versions 命令完全指南Gel CLI 服务器版本管理 gel server list versions 命令完全指南 gel server list versions 是 Gel数据库图数据库关系型数据库requests库源码解析核心Request和Response结构体探秘requests库源码解析核心Request和Response结构体探秘 在Go语言开发中HTTP客户端库是构建网络应用的基础组件。 requests库 作数据库图数据库关系型数据库告别官方限制三步获取B站专业直播推流码的完整指南告别官方限制三步获取B站专业直播推流码的完整指南 你是否曾因B站直播姬的功能限制而感到束手束脚想要使用OBS等专业软件却苦于无法获取推流码今天让我们一起数据库图数据库关系型数据库创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表