vscode默认不支持sql编写,必须手动配置language mode、defaultformatter和数据库连接三者缺一不可;否则高亮失效、格式化无响应、补全不准确。

VSCode 默认不支持 SQL 编写,装插件 ≠ 能用,必须手动配 language mode、defaultFormatter 和连接逻辑,否则高亮失效、格式化无反应、补全全靠猜。
SQL 文件没高亮、按 Ctrl+Shift+I 没反应,先改 language mode 和 defaultFormatter
VSCode 打开 .sql 文件默认是 Plain Text,所有功能都关着。这不是 bug,是设计如此。
- 点击右下角语言标识(如
Plain Text),输入sql,选SQL或具体方言(如PostgreSQL) - 按
Ctrl+Shift+P运行Preferences: Configure Language Specific Settings→ 选SQL,填入:{"editor.defaultFormatter": "cdsama.sql-formatter"}(插件 ID 以你安装的实际为准,SQL Formatter是常见选择) - 同时在全局设置里打开
editor.formatOnSave,否则每次都要手动按Shift+Alt+F - 加一句
"files.associations": {"*.sql": "sql"}到settings.json,避免下次新建文件又变Plain Text
连上数据库才能有表名/字段补全,SQLTools 不会自动读取你的 psql 配置
所谓“数据库插件”只是 UI + 协议层,不是客户端。它不会解析 ~/.pgpass,也不会从 psql -d mydb 推断连接参数。
- 装
SQLTools(作者mtxr) + 对应驱动(如SQLTools PostgreSQL Driver) - 右键资源管理器 →
Create Connection→ 手动填host、port、database、user、password - 连接成功后,只有在该连接下打开的「Query Editor」(不是普通
.sql文件)才支持上下文感知补全 - 密码明文存在
~/.sqltools/config.json,生产环境务必用系统密钥链(macOS Keychain / Windows Credential Manager)托管
格式化后 SQL 变错、关键字全大写、缩进乱套,问题出在 formatter 配置项
不同 formatter 默认行为差异极大:sql-formatter 默认 uppercase + 2-space indent;pgFormatter(需 CLI 安装)默认小写 + 4 空格 + 支持 PostgreSQL 特有语法;prettier-plugin-sql 则更灵活但要额外装依赖。
- 查清你用的 formatter 支持哪些配置项,比如
sqlFormatter.keywordCase(upper/lower/preserve)、sqlFormatter.indentStyle(standard/tabular) - 工作区级配置优先于全局,建议在项目根目录建
.vscode/settings.json,单独设"sqlFormatter.dialect": "postgresql" - 如果项目混用多种方言(如既有 PostgreSQL 又有 SQLite 查询),别强求统一 formatter,按文件类型切分更稳
- 注意
sql-formatter的logicalOperatorNewline默认是before,即AND换行顶格,和多数团队习惯相反,需手动调成after
想执行 SQL 查结果?别在普通 .sql 文件里 Ctrl+Enter
快捷键只在 SQLTools 的 Query Editor 里生效。普通 .sql 文件里按 Ctrl+Enter 是无效的,VSCode 不知道你要连哪个库、用什么协议。
- 必须通过 SQLTools 创建连接后,点「New Query」或右键数据库 → 「New Query」,打开的是带连接上下文的编辑器
- 选中语句 →
Ctrl+Enter(Win/Linux)或Cmd+Enter(macOS),结果以内联表格形式展示 - 多语句用分号分隔,但 SQLite 驱动默认禁用多语句,需在连接配置里显式加
"enableMultiStatement": true - 右键语句可直接选「Explain Query Plan」,PostgreSQL/MySQL 支持较好,SQLite 目前不支持
最常被忽略的一点:SQLTools 的语言服务(syntax check、hover info)和格式化(formatting)是两套独立机制。开了连接 ≠ 自动格式化,开了 formatter ≠ 自动识别方言。language mode、connection、formatter 三者必须对齐,缺一不可。











