
Beekeeper Studio SQL 查询格式化器预设管理与配置完整指南【免费下载链接】beekeeper-studioModern and easy to use SQL client for MySQL, Postgres, SQLite, SQL Server, and more. Linux, MacOS, and Windows.项目地址: https://gitcode.com/GitHub_Trending/be/beekeeper-studioBeekeeper Studio 内置的 SQL 查询格式化器SQL Query Formatter将 sql-formatter 为核心结合仓库源码完整讲解格式化器的打开方式、内置预设、自定义配置、预设的增删改以及如何通过右键菜单一键套用预设。格式化器是什么Beekeeper Studio 的 SQL 查询格式化器是一个可视化工具它把 sql-formatter 库的所有格式化选项暴露到你的指尖使你能从内置的 3 套预设中选择基准配置实时调整缩进、大小写、运算符换行等细节并在右侧预览效果把满意的配置保存为命名预设跨连接、跨标签页反复使用在编辑器右键菜单中一键应用任意已保存的预设。从源码结构看格式化器被设计为主应用中的一个独立模态窗口组件由 TabQueryEditor.vue 中的handleFormatterPresetModal方法控制开关this.$modal.show(this.superFormatterId)/this.$modal.hide(...)核心 UI 组件则沉淀在 ui-kit 仓库的 Super Formatter 组件中其完整组件文档见 apps/ui-kit/docs/super-formatter.md。快速上手如何打开格式化器打开 SQL 查询格式化器有两种方式右键菜单在编辑器窗口内右键选择Format Query → Custom…打开格式化器并进入自定义配置界面工具栏按钮点击编辑器工具栏中Save保存和Run运行按钮旁边的格式化按钮。打开后你可以从下拉菜单选择一个预设作为基准调整各项配置右侧预览区会实时显示格式化效果。三个内置预设格式化器开箱即用内置 3 套预设见迁移脚本 apps/studio/src/migration/20250831_populate_formatter_presets.js 中的种子数据bk-default默认——Beekeeper Studio 的默认配置2 空格缩进、使用空格、关键字/数据类型/函数名大小写均保持原样preserve、逻辑运算符换行前置、表达式宽度 50、查询之间空 1 行pgFormatter——模仿经典 pgFormatter 工具的风格4 空格缩进、关键字转大写upper、数据类型转小写lower、函数名保持原样prettier-sql——仿照 Prettier 的 SQL 风格2 空格缩进、关键字大写、数据类型小写、函数名保持原样、查询之间空 2 行。这 3 个内置预设都在数据库中以systemDefault 1标记不可删除但可以编辑。它们的精确配置值如下预设tabWidthuseTabskeywordCasedataTypeCasefunctionCaselinesBetweenQueriesbk-default2falsepreservepreservepreserve1pgFormatter4falseupperlowerpreserve1prettier-sql2falseupperlowerpreserve2设置默认格式化预设格式化器默认使用bk-default作为编辑器打开时的默认预设。你可以通过 Beekeeper Studio 的配置系统修改这一默认值相关配置项位于[ui.queryEditor]段落[ui.queryEditor] defaultFormatter bk-default该配置在默认配置文件中真实存在apps/studio/default.config.ini 中defaultFormatter bk-default并在类型声明 apps/studio/src/typings/bksConfig.d.ts 中定义为queryEditor.defaultFormatter: string。将值替换为任意已保存预设的名称例如pgFormatter即可让编辑器默认套用该预设。从源码看编辑器加载时通过getPresets读取该配置并选中对应预设// apps/studio/src/components/TabQueryEditor.vue getPresets(presetId) { this.$util.send(appdb/formatter/getAll) .then((presets) { const presetToFind typeof presetId object ? this.$bksConfig.ui.queryEditor.defaultFormatter : presetId const selectedFormatter presets.find(p Number(p.id) Number(presetToFind)) if (selectedFormatter ! null) { this.selectedFormatter { id: selectedFormatter.id, ...selectedFormatter.config } } this.formatterPresets presets }) // ... }注意presetToFind既可以是预设的数字 id也可以直接是配置中写的预设名称字符串两种方式都兼容。如何格式化查询格式化一条查询的标准流程打开 SQL 查询格式化器右键菜单 → Format Query → Custom…或点击工具栏按钮从下拉菜单选择一个预设作为基准调整各项格式选项并通过右侧实时预览确认效果点击Apply应用。注意点击 Apply 只会把当前配置应用到编辑器中的 SQL并不会把修改写回所选预设。应用操作在源码中的对应实现是applyPreset它先关闭格式化器模态窗口再把当前配置设为编辑器生效的 formatter 配置// apps/studio/src/components/TabQueryEditor.vue applyPreset(presetConfig) { this.handleFormatterPresetModal({ showFormatter: false }) this.selectedFormatter { ...presetConfig } }如何保存一个预设覆盖更新如果你想更新某个已有预设的配置按格式化查询的步骤 13 操作打开格式化器、选择预设、调整选项不要点击Apply而是点击Save Preset保存预设。注意保存操作不会自动把新配置应用到当前查询如需应用仍需点击 Apply。保存更新流程在源码中走savePreset方法当存在id时调用appdb/formatter/updatePreset端点// apps/studio/src/components/TabQueryEditor.vue savePreset({ id, config, name }) { // id null → appdb/formatter/newPreset新建 // id ! null → appdb/formatter/updatePreset更新 this.$util.send(endpoint, inputData) .then((presetValues) { this.$noty.success(${notyMessage} complete) this.selectedFormatter { id: presetValues.id, ...presetValues.config } }) // ... }底层数据操作由 apps/studio/src/handlers/formatterPresetHandlers.ts 中的appdb/formatter/updatePreset处理器完成最终落到 FormatterPreset.updatePreset按id查找记录、更新configJSON 字符串化后存储并保存。如何创建新预设打开 SQL 查询格式化器从下拉菜单选择一个预设作为基准点击预设下拉菜单旁的按钮输入格式名称名称必须唯一调整各项选项并通过右侧预览确认效果点击Save Preset保存。提示新预设保存后不会自动应用到当前 SQL如需应用请点击 Apply。新预设的持久化链路与更新一致savePreset在id为null时调用appdb/formatter/newPreset端点处理器转交 FormatterPreset.addPreset将配置JSON.stringify后连同名称写入数据库systemDefault标记为0即用户自定义预设。名称唯一性保证迁移脚本 apps/studio/src/migration/20251013_unique_name_formatter_presets.js 在formatter_presets表上创建了唯一索引CREATE UNIQUE INDEX idx_formatter_presets_name on formatter_presets(name);这意味着在数据库中层面就强制了“名称唯一”规则重复名称的新建会直接失败。预设本身存储在应用的 SQLite 数据库的formatter_presets表中建表脚本见 apps/studio/src/migration/20250831_create_formatter_presets.jsCREATE TABLE IF NOT EXISTS formatter_presets ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, config TEXT NOT NULL, -- JSON 序列化的格式化配置 systemDefault INTEGER NOT NULL DEFAULT 0, createdAt DATETIME NOT NULL DEFAULT (datetime(now)), updatedAt DATETIME NOT NULL DEFAULT (datetime(now)), version INTEGER NOT NULL DEFAULT 0 )如何删除一个预设打开 SQL 查询格式化器从下拉菜单选择要删除的预设点击旁边的Delete Config删除配置按钮。注意3 个内置预设bk-default、pgFormatter、prettier-sql不可删除但可以被编辑。删除在 UI 层先弹出确认框随后调用appdb/formatter/deletePreset端点apps/studio/src/handlers/formatterPresetHandlers.ts最终由 FormatterPreset.deletePreset 按id执行删除删除成功后会通过 noty 通知提示Formatter Configuration successfully deleted。使用预设格式化查询右键菜单快捷方式除了打开格式化器界面编辑器还提供了更快捷的方式直接套用预设在编辑器窗口内右键将鼠标悬停在Format Query菜单项上在弹出的子菜单中选择一个已保存的预设。此时不会打开格式化器而是直接把该预设的配置应用到当前查询。从源码看右键菜单的Format Query会直接列出已保存的预设包含内置与自定义同时提供Custom…入口跳转到完整的自定义界面。底层原理配置如何被真正应用到 SQL格式化器界面中的每一项配置最终都会映射为 sql-formatter 库的格式化选项。应用核心格式化逻辑位于 apps/studio/src/lib/db/sql_tools.tsimport { format, ParamItems } from sql-formatter export function deparameterizeQuery(queryText, dialect, params, paramTypes) { if (dialect redis) { // 格式化会破坏 Redis 多行命令执行直接返回原文 return queryText } const result format(queryText, { language: FormatterDialect(dialect), paramTypes, params }) return result }值得注意的细节方言映射Beekeeper 的 Dialect 名称与 sql-formatter 的 language 名称并不一一对应apps/studio/src/shared/lib/dialects/models.ts 中的FormatterDialect函数负责转换例如sqlserver → tsql、oracle → plsql、greengage → postgresql、cassandra/duckdb/surrealdb → sql默认回退为mysql自定义方言对于 sql-formatter 未内置的方言如 DynamoDB 的 PartiQLformatOptionsFor返回自定义的dialect配置而非language使用formatDialect分发处理特殊例外Redis 方言会跳过格式化以保护多行命令的执行语义参数还原convertParamsForReplacement会把占位符值转换为 sql-formatter 可识别的参数格式从而在格式化时保持?/:name等参数占位符完整。在编辑器中格式化后的 SQL 通过deparameterizeQuery生成后回填到编辑器见 TabQueryEditor.vue 中对safelyIdentify、convertParamsForReplacement、deparameterizeQuery的调用链。可配置选项速查表Super Formatter 组件UI 层支持的全部格式化选项如下完整 API 文档见 apps/ui-kit/docs/super-formatter.md缩进tabWidth每级缩进的空格数120useTabs是否用制表符替代空格true/false。大小写keywordCaseSQL 关键字大小写转换preserve / upper / lowerdataTypeCase数据类型名大小写转换preserve / upper / lowerfunctionCase函数名大小写转换preserve / upper / lower。排版logicalOperatorNewline逻辑运算符AND/OR的换行位置before / afterexpressionWidth表达式最大宽度超出后换行1100默认 50linesBetweenQueries多条查询之间的空行数120denseOperators是否压缩运算符两侧空格如ab而非a bnewlineBeforeSemicolon分号是否单独换行放置。一个完整的预设配置对象示例{ tabWidth: 2, useTabs: false, keywordCase: upper, dataTypeCase: upper, functionCase: upper, logicalOperatorNewline: before, expressionWidth: 50, linesBetweenQueries: 1, denseOperators: false, newlineBeforeSemicolon: false }常见问题问Apply 和 Save Preset 有什么区别Apply 只把当前配置应用到编辑器中的 SQL不写回预设Save Preset 把配置写入所选预设或新建预设但不会自动应用到当前 SQL。两者是独立的操作想既保存又应用需要分别执行。问内置预设能删除吗不能。3 个内置预设bk-default、pgFormatter、prettier-sql以systemDefault 1标记禁止删除但它们可以被编辑覆盖。问预设名称能重复吗不能。数据库层面的唯一索引idx_formatter_presets_name强制预设名称唯一。问怎么让新打开的表/编辑器默认使用我的预设在配置文件如default.config.ini或用户配置文件的[ui.queryEditor]段落设置defaultFormatter 你的预设名称。参考资源官方用户指南docs/user_guide/sql-query-formatter.md英文原版、docs/user_guide/sql-query-formatter.es.md西班牙语版配置系统说明docs/user_guide/configuration.mdUI 组件 API 文档apps/ui-kit/docs/super-formatter.md预设数据模型apps/studio/src/common/appdb/models/FormatterPreset.ts预设持久化处理器apps/studio/src/handlers/formatterPresetHandlers.ts格式化核心逻辑apps/studio/src/lib/db/sql_tools.ts方言到 formatter 语言映射apps/studio/src/shared/lib/dialects/models.ts数据库迁移20250831_create_formatter_presets.js、20250831_populate_formatter_presets.js、20251013_unique_name_formatter_presets.js默认配置apps/studio/default.config.ini【免费下载链接】beekeeper-studioModern and easy to use SQL client for MySQL, Postgres, SQLite, SQL Server, and more. Linux, MacOS, and Windows.项目地址: https://gitcode.com/GitHub_Trending/be/beekeeper-studio创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考