เชื่อมต่อ PostgreSQL กับ Claude Code ผ่าน MCP ตั้งค่าบัญชีอ่านอย่างเดียวพร้อมควบคุมสิทธิ์ ให้ Claude อ่าน schema เขียน query และวิเคราะห์ข้อมูลโดยตรง
หลังจากเชื่อมต่อฐานข้อมูล วิธีทำงานของ Claude Code จะเปลี่ยนไป ไม่ต้องก copy โครงสร้างตารางใส่ prompt หรืออธิบายชื่อ field — Claude เชื่อมต่อโดยตรง อ่าน schema เอง เขียน query เอง และวิเคราะห์ผลลัพธ์ให้
บทความนี้ใช้ PostgreSQL เป็นตัวอย่าง และอธิบายกระบวนการทั้งหมดตั้งแต่การตั้งค่าจนถึงการใช้งานจริง
@modelcontextprotocol/server-postgres อย่างเป็นทางการรองรับ:
อ่านอย่างเดียว Server นี้ออกแบบมาสำหรับ query เท่านั้น ไม่รัน INSERT, UPDATE หรือ DELETE
npm install -g @modelcontextprotocol/server-postgres
แก้ไข .claude/settings.json (ระดับ project):
{
"mcpServers": {
"db": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-postgres",
"postgresql://readonly_user:password@localhost:5432/myapp_production"]
}
}
}
ถ้าไม่อยากเก็บ password ในไฟล์ config ให้ใช้ field env กับ environment variable การตั้งค่าที่ sensitive ให้เก็บใน .claude/settings.local.json และเพิ่มใน .gitignore
CREATE USER claude_readonly WITH PASSWORD 'your_password';
GRANT CONNECT ON DATABASE myapp_production TO claude_readonly;
GRANT USAGE ON SCHEMA public TO claude_readonly;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO claude_readonly;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO claude_readonly;
Restart Claude Code แล้วถาม: "แสดงรายการตารางทั้งหมดในฐานข้อมูล" ถ้า Claude ส่งคืนรายการตาราง — MCP ทำงานแล้ว
เข้าใจโครงสร้างข้อมูล: "ความสัมพันธ์ระหว่างตาราง users กับ orders คืออะไร? มี foreign key constraint ไหม?"
วิเคราะห์ข้อมูล: "จากผู้ใช้ที่สมัครใน 30 วันที่ผ่านมา กี่เปอร์เซ็นต์ที่สั่งซื้ออย่างน้อยหนึ่งครั้ง? แบ่งตาม channel การสมัคร"
Debug: "หา order ที่มี status = 'pending' แต่ created_at เกิน 7 วันแล้ว มีกี่รายการและล่าสุดเมื่อไหร่?"
สนับสนุนการพัฒนา: "อยากเพิ่มคอลัมน์ last_login_at ในตาราง users เขียน SQL migration ให้หน่อย และตรวจว่า index ที่มีอยู่เพียงพอไหม"
-- ระดับตาราง
GRANT SELECT ON TABLE users, orders, products TO claude_readonly;
-- view สำหรับกรอง field ที่ sensitive
CREATE VIEW users_safe AS SELECT id, email, created_at, plan, status FROM users;
GRANT SELECT ON users_safe TO claude_readonly;
ssh -L 5433:localhost:5432 [email protected] -N
การเปลี่ยนแปลงที่เห็นได้ชัดที่สุด: การสนทนาเกี่ยวกับข้อมูลไม่ต้องเตรียมตัวล่วงหน้าอีกต่อไป ไม่ต้องอธิบาย schema ไม่ต้องบอกประเภท field — บอกความต้องการแล้ว Claude จัดการเอง มีประโยชน์มากตอน debug: แทนที่จะ query เอง copy ผลลัพธ์ แล้ว paste ให้ Claude วิเคราะห์ คุณแค่อธิบายปัญหา Claude query โดยตรงและให้ข้อสรุปทันที