Postgres Language Server เปิดตัวหลังจากการพัฒนานานกว่าสองปี

BigGo Editorial Team
Postgres Language Server เปิดตัวหลังจากการพัฒนานานกว่าสองปี

ชุมชนนักพัฒนาตอนนี้สามารถเข้าถึงเครื่องมือใหม่ที่ทรงพลังสำหรับการพัฒนา PostgreSQL ด้วยการเปิดตัว Postgres Language Server ซึ่งเป็นโครงการที่อยู่ในระหว่างการพัฒนามาเกือบสองปี เซิร์ฟเวอร์ภาษาแบบโอเพนซอร์สนี้มอบคุณสมบัติที่จำเป็น เช่น การเติมคำอัตโนมัติ การไฮไลต์ข้อผิดพลาดทางไวยากรณ์ การตรวจสอบประเภทข้อมูล และการตรวจสอบโค้ดสำหรับภาษา SQL ของ PostgreSQL

เรโพสิทอรี GitHub สำหรับ Postgres Language Server แสดงให้เห็นถึงการพัฒนาและการมีส่วนร่วมของชุมชน
เรโพสิทอรี GitHub สำหรับ Postgres Language Server แสดงให้เห็นถึงการพัฒนาและการมีส่วนร่วมของชุมชน

แก้ไขปัญหาประสบการณ์การพัฒนา SQL

Postgres Language Server แก้ไขช่องว่างที่สำคัญในขั้นตอนการพัฒนาสำหรับผู้ที่ทำงานกับฐานข้อมูล PostgreSQL เป็นประจำ ก่อนหน้านี้ นักพัฒนามักต้องเขียน SQL โดยไม่มีการตอบสนองแบบเรียลไทม์ ต้องรันการ migration เพื่อตรวจจับข้อผิดพลาด หรือต้องค้นหาข้อมูลโครงสร้างด้วยตนเอง เซิร์ฟเวอร์ภาษานี้นำความสามารถของ IDE สมัยใหม่มาสู่การพัฒนา SQL ช่วยให้นักพัฒนาสามารถตรวจจับข้อผิดพลาดก่อนการดำเนินการ

สิ่งที่ทำให้โครงการนี้น่าสนใจเป็นพิเศษคือแนวทางในการแยกวิเคราะห์ SQL ตามที่หนึ่งในผู้ร่วมพัฒนาได้อธิบายไว้ในความคิดเห็น พวกเขาเผชิญกับความท้าทายพื้นฐาน: ตัวแยกวิเคราะห์ของ PostgreSQL มีความซับซ้อนและมีการพัฒนาอยู่ตลอดเวลา ทำให้การสร้างตัวแยกวิเคราะห์เองเป็นเรื่องที่ไม่สามารถทำได้ในทางปฏิบัติ นอกจากนี้ เซิร์ฟเวอร์ภาษาจำเป็นต้องจัดการทั้งคำสั่ง SQL ที่ถูกต้องและไม่สมบูรณ์

วิธีแก้ปัญหาอย่างง่ายคือการใช้ตัวแยกวิเคราะห์สองตัว – libpg_query ตัวเดิมที่ใช้โดย Postgres เอง และ tree-sitter สำหรับคำสั่งที่ไม่สมบูรณ์ แล้วรวมผลลัพธ์ที่แยกวิเคราะห์ได้ ด้วยวิธีนี้ คุณสามารถได้ทั้ง AST ที่ใช้งานได้สำหรับการวินิจฉัย และ CST ของ tree-sitter สำหรับการเติมคำอัตโนมัติ เป็นต้น

การนำไปใช้และการบูรณาการที่หลากหลาย

Postgres Language Server ถูกสร้างขึ้นโดยคำนึงถึงความหลากหลายในการใช้งาน แม้ว่าจะใช้ Language Server Protocol (LSP) สำหรับการบูรณาการกับ IDE แต่การออกแบบที่ไม่ขึ้นกับการขนส่งข้อมูลทำให้สามารถเข้าถึงคุณสมบัติต่างๆ ผ่านหลายอินเทอร์เฟซ รวมถึง CLI, HTTP APIs และโมดูล 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 ที่ฝังอยู่ในภาษาโปรแกรมต่างๆ สิ่งนี้อาจช่วยให้สามารถตรวจสอบแบบสแตติกและการเติมคำอัตโนมัติของคำสั่ง SQL ภายในโค้ดที่เขียนด้วยภาษาต่างๆ เช่น Python, Rust หรือ TypeScript แม้ว่าฟังก์ชันนี้จะต้องใช้โซลูชันฝั่งเอดิเตอร์ แต่นักพัฒนาได้กล่าวว่าพวกเขากำลังสำรวจตัวเลือกสำหรับการสนับสนุนโดยตรงใน workspace API ของพวกเขา

สำหรับนักพัฒนาที่ทำงานกับแพลตฟอร์มที่ใช้ประโยชน์จากคุณสมบัติของ PostgreSQL อย่างมาก เช่น triggers, Row Level Security และฟังก์ชัน SQL เครื่องมือนี้แสดงถึงการปรับปรุงที่สำคัญในประสบการณ์การพัฒนา ด้วยการให้ข้อเสนอแนะทันทีเกี่ยวกับข้อผิดพลาดทางไวยากรณ์และการนำเสนอการเติมคำอัตโนมัติตามข้อมูลโครงสร้าง Postgres Language Server ช่วยปรับปรุงขั้นตอนการทำงานในการพัฒนาฐานข้อมูลและช่วยตรวจจับปัญหาที่อาจเกิดขึ้นได้เร็วขึ้นในกระบวนการพัฒนา

อ้างอิง: Postgres Language Server

ข้อความแสดงข้อผิดพลาดจาก CLI ของ postgres-tools แสดงให้เห็นถึงการประยุกต์ใช้งานจริงของการตรวจสอบไวยากรณ์ SQL และการตรวจสอบประเภทข้อมูล
ข้อความแสดงข้อผิดพลาดจาก CLI ของ postgres-tools แสดงให้เห็นถึงการประยุกต์ใช้งานจริงของการตรวจสอบไวยากรณ์ SQL และการตรวจสอบประเภทข้อมูล