7.0 KiB
7.0 KiB
VS Code PostgreSQL 语法检查器配置指南
推荐扩展安装
1. 核心PostgreSQL扩展
- PostgreSQL (ms-ossdata.vscode-pgsql) - 微软官方PostgreSQL扩展
- pgFormatter (bradymholt.pgformatter) - PostgreSQL代码格式化工具
- SQLTools (mtxr.sqltools) - 通用数据库管理工具
- SQLTools PostgreSQL Driver (mtxr.sqltools-driver-pg) - PostgreSQL驱动
2. 可选扩展
- Database Client (cweijan.vscode-postgresql-client2) - PostgreSQL客户端
- SQL tagged template literals (frigus02.vscode-sql-tagged-template-literals) - 模板字符串语法高亮
VS Code 配置设置
将以下配置添加到您的 settings.json 文件中:
{
// PostgreSQL 文件关联
"files.associations": {
"*.sql": "postgres",
"*.pgsql": "postgres",
"*.psql": "postgres"
},
// PostgreSQL 语法高亮
"[postgres]": {
"editor.defaultFormatter": "bradymholt.pgformatter",
"editor.formatOnSave": true,
"editor.tabSize": 2,
"editor.insertSpaces": true,
"editor.wordWrap": "on"
},
// SQL 语法高亮
"[sql]": {
"editor.defaultFormatter": "bradymholt.pgformatter",
"editor.formatOnSave": true,
"editor.tabSize": 2,
"editor.insertSpaces": true
},
// pgFormatter 配置
"pgFormatter.spaces": 2,
"pgFormatter.commaBreak": true,
"pgFormatter.noSpaceFunction": false,
"pgFormatter.functionCase": 1,
"pgFormatter.keywordCase": 2,
"pgFormatter.maxLineLength": 120,
"pgFormatter.noComment": false,
"pgFormatter.formatType": false,
// SQLTools 配置
"sqltools.useNodeRuntime": true,
"sqltools.telemetry": false,
"sqltools.format": {
"language": "postgresql"
},
// 错误检查配置
"postgres.showSmartIntelliSense": true,
"postgres.enableIntelliSense": true,
"postgres.format.keywordCase": "upper",
// 文件类型检测
"files.exclude": {
"**/*.sqlc": false
},
// 语言服务器配置
"postgres.enableConnectionPooling": true,
"postgres.maxNumberOfProblems": 100,
// 自动完成配置
"editor.suggest.insertMode": "replace",
"editor.acceptSuggestionOnCommitCharacter": false,
"editor.suggest.showWords": false
}
项目级配置
在您的项目根目录创建 .vscode/settings.json 文件:
{
// 项目特定的PostgreSQL配置
"files.associations": {
"*.sql": "postgres",
"message_system.sql": "postgres",
"message_test_data.sql": "postgres"
},
// 数据库连接配置(示例)
"sqltools.connections": [
{
"name": "PostgreSQL Local",
"driver": "PostgreSQL",
"server": "localhost",
"port": 5432,
"database": "your_database_name",
"username": "your_username",
"password": "",
"connectionTimeout": 30
}
],
// 代码片段和智能提示
"postgres.defaultDatabase": "your_database_name",
"postgres.enableCodeLens": true
}
语法检查功能
1. 实时语法检查
- 安装扩展后,VS Code会自动检查PostgreSQL语法错误
- 错误会在编辑器中用红色波浪线标出
- 鼠标悬停可查看详细错误信息
2. 智能代码完成
- 自动完成SQL关键字
- 表名和列名自动完成(需要连接数据库)
- 函数名自动完成
3. 代码格式化
- 使用
Shift + Alt + F格式化SQL代码 - 支持自定义格式化规则
4. 错误诊断
- 语法错误检测
- 类型检查
- 未定义变量/表检测
解决常见语法检查问题
1. JSONB操作符问题
如果您的SQL中使用了 ->>、? 等PostgreSQL特有操作符,可以:
-- 使用类型转换明确指定
SELECT metadata::jsonb->>'test_data' FROM messages;
-- 或使用函数形式
SELECT jsonb_extract_path_text(metadata, 'test_data') FROM messages;
2. UUID类型转换
-- 明确UUID类型转换
INSERT INTO table (id) VALUES ('7bf7378e-a027-473e-97ac-3460ed3f170a'::uuid);
-- 或使用函数
INSERT INTO table (id) VALUES (uuid('7bf7378e-a027-473e-97ac-3460ed3f170a'));
3. 时间间隔问题
-- 使用PostgreSQL标准语法
SELECT now() - INTERVAL '1 day';
-- 或使用字符串转换
SELECT now() - '1 day'::interval;
4. DO块和存储过程
-- 确保使用正确的DO块语法
DO $$
DECLARE
var_name datatype;
BEGIN
-- 您的代码
END $$;
数据库连接配置
1. 通过SQLTools连接
- 按
Ctrl+Shift+P打开命令面板 - 输入 "SQLTools: Add New Connection"
- 选择 PostgreSQL
- 填入连接信息
2. 连接配置示例
{
"sqltools.connections": [
{
"name": "开发数据库",
"driver": "PostgreSQL",
"server": "localhost",
"port": 5432,
"database": "akmon_dev",
"username": "postgres",
"askForPassword": true,
"pg": {
"ssl": false
}
}
]
}
快捷键设置
添加到 keybindings.json:
[
{
"key": "ctrl+shift+e",
"command": "sqltools.executeQuery",
"when": "editorLangId == postgres"
},
{
"key": "f5",
"command": "sqltools.executeQuery",
"when": "editorLangId == postgres"
},
{
"key": "ctrl+shift+f",
"command": "editor.action.formatDocument",
"when": "editorLangId == postgres"
}
]
代码片段
创建 .vscode/postgres.json 代码片段文件:
{
"Create Table": {
"prefix": "table",
"body": [
"CREATE TABLE ${1:table_name} (",
" id uuid PRIMARY KEY DEFAULT gen_random_uuid(),",
" ${2:column_name} ${3:data_type}${4: NOT NULL},",
" created_at TIMESTAMP WITH TIME ZONE DEFAULT now(),",
" updated_at TIMESTAMP WITH TIME ZONE DEFAULT now()",
");"
],
"description": "Create a PostgreSQL table"
},
"Insert with JSONB": {
"prefix": "insertjson",
"body": [
"INSERT INTO ${1:table_name} (",
" ${2:columns}",
") VALUES (",
" ${3:values},",
" '${4:json_data}'::jsonb",
");"
],
"description": "Insert with JSONB data"
}
}
调试技巧
1. 使用EXPLAIN分析查询
EXPLAIN (ANALYZE, BUFFERS)
SELECT * FROM ak_messages
WHERE metadata->>'test_data' = 'true';
2. 检查语法的简单方法
-- 使用简单的SELECT验证语法
SELECT 1 WHERE EXISTS (
-- 您的复杂查询
);
3. 逐步构建复杂查询
-- 先测试简单部分
SELECT id FROM ak_messages LIMIT 1;
-- 再添加复杂条件
SELECT id FROM ak_messages
WHERE metadata->>'test_data' = 'true' LIMIT 1;
性能优化建议
1. 索引使用
-- 为JSONB字段创建GIN索引
CREATE INDEX idx_messages_metadata_gin ON ak_messages USING gin(metadata);
-- 为特定JSONB路径创建索引
CREATE INDEX idx_messages_test_data ON ak_messages
USING btree((metadata->>'test_data')) WHERE metadata ? 'test_data';
2. 查询优化
-- 使用EXISTS而不是IN
SELECT * FROM ak_messages m
WHERE EXISTS (
SELECT 1 FROM ak_message_recipients mr
WHERE mr.message_id = m.id
);
通过以上配置,您的VS Code将具备强大的PostgreSQL语法检查和开发能力!