隨著 Postgres 語言伺服器的釋出,開發者社群現在可以使用這一強大的新工具進行 PostgreSQL 開發,該專案已經開發了近兩年。這個開源語言伺服器為 PostgreSQL 的 SQL 方言提供了自動完成、語法錯誤高亮、型別檢查和程式碼質量檢測等基本功能。
![]() |
---|
Postgres Language Server 的 GitHub 倉庫,展示其開發過程和社群貢獻 |
解決 SQL 開發體驗問題
Postgres 語言伺服器解決了那些大量使用 PostgreSQL 資料庫的開發者工作流程中的一個重大缺口。在這個工具出現之前,開發者通常需要在沒有即時反饋的情況下編寫 SQL,執行遷移來捕獲錯誤或手動查詢架構資訊。語言伺服器為 SQL 開發帶來了現代 IDE 功能,使開發者能夠在執行前發現錯誤。
這個專案特別有趣的是它解析 SQL 的方法。正如其中一位共同作者在評論中解釋的那樣,他們面臨一個基本挑戰:PostgreSQL 的解析器複雜且不斷發展,使得建立自定義解析器變得不切實際。此外,語言伺服器需要處理有效和不完整的 SQL 語句。
「簡單的解決方案是實際使用兩個解析器 - PostgreSQL 本身使用的原始 libpg_query,以及用於不完整語句的 tree-sitter,併合並解析結果。這樣,你既可以獲得用於診斷的可用 AST,又可以獲得用於自動完成的 tree-sitter 的 CST。」
多功能實現和整合
Postgres 語言伺服器的構建考慮了多功能性。雖然它利用語言伺服器協議(LSP)進行 IDE 整合,但其與傳輸無關的設計意味著可以透過多種介面訪問這些功能,包括 CLI、HTTP API 和 WebAssembly 模組。無論開發者偏好什麼環境,這都使工具變得易於訪問。
該伺服器已經可以作為可下載的二進位制檔案、npm 包、VSCode 擴充套件使用,並且可以透過 nvim-lspconfig 和 mason 為 Neovim 使用者安裝。這種廣泛的可用性展示了團隊致力於使工具儘可能易於獲取的承諾。
Postgres Language Server 的特點:
- 自動補全
- 語法錯誤高亮
- 型別檢查(透過 EXPLAIN 錯誤洞察)
- 程式碼檢查(受 Squawk 啟發)
可用的安裝方法:
- 從倉庫下載二進位制檔案
- npm 包
- VSCode 擴充套件
- Neovim(透過 nvim-lspconfig 和 mason)
使用的關鍵技術:
- libpg_query(Postgres 自己的解析器)
- tree-sitter(用於處理不完整語句)
- 伺服器-客戶端架構,採用與傳輸方式無關的設計
未來方向和社群影響
目前,語言伺服器專注於 SQL 語句,但開發者已經表示計劃在未來擴充套件對函式體和 PL/pgSQL 的支援。社群已經開始報告錯誤並提出改進建議,開發者表現出令人印象深刻的響應能力,迅速解決問題。
社群成員提出的一個特別令人興奮的可能性是將語言伺服器與各種程式語言中的嵌入式 SQL 整合的潛力。這可能允許對 Python、Rust 或 TypeScript 等語言中編寫的程式碼中的 SQL 語句進行靜態檢查和自動完成。雖然這種功能需要編輯器端的解決方案,但開發者已經提到他們正在探索直接支援工作區 API 的選項。
對於使用 PostgreSQL 功能(如觸發器、行級安全性和 SQL 函式)的平臺開發者來說,這個工具代表了開發體驗的重大改進。透過提供對語法錯誤的即時反饋,並基於架構資訊提供自動完成功能,Postgres 語言伺服器有助於簡化資料庫開發工作流程,並在開發過程的早期發現潛在問題。
![]() |
---|
來自 postgres-tools CLI 的錯誤輸出,展示了SQL語法檢查和型別驗證的實際應用 |