- PostgreSQL MCP คืออะไร
- ประโยชน์
- Workshop: PostgreSQL + MCP + VS Code
- หมายเหตุเกี่ยวกับ MCP Server
- แหล่งอ้างอิง
#PostgreSQL MCP คืออะไร
PostgreSQL MCP Server เป็นตัวกลางตามมาตรฐาน Model Context Protocol (MCP) ที่เปิดเครื่องมือให้ AI Assistant ตรวจสอบโครงสร้างฐานข้อมูลและเรียกใช้ SQL ผ่านสิทธิ์ที่กำหนด โดยไม่จำเป็นต้องให้โมเดลเชื่อมต่อฐานข้อมูลโดยตรง
flowchart LR U[ผู้ใช้] --> A[AI Assistant / MCP Client] A <-->|MCP stdio| M[PostgreSQL MCP Server] M -->|SQL / Metadata| P[(PostgreSQL)] P -->|Rows / Schema| M M -->|Tool Result| A
#ประโยชน์
- ค้นหาตาราง คอลัมน์ และความสัมพันธ์จากภาษาธรรมชาติ
- สรุปข้อมูลด้วย SQL โดยให้ AI ช่วยสร้างคำสั่ง
- วิเคราะห์ประสิทธิภาพคำสั่ง SQL และแผน EXPLAIN
- ใช้เป็นเครื่องมือข้อมูลสำหรับ AI Agent และระบบวิเคราะห์ภายในองค์กร
#Workshop: PostgreSQL + MCP + VS Code
#1. สิ่งที่ต้องเตรียม
- Docker และ Docker Compose
- Node.js 22 ขึ้นไป สำหรับ MCP Server ตัวอย่างนี้
- VS Code พร้อม MCP Client ที่รองรับ (เช่น GitHub Copilot Chat)
#2. เริ่ม PostgreSQL ด้วย Docker Compose
สร้าง compose.yaml:
services:
postgres:
image: postgres:17
environment:
POSTGRES_DB: shopdb
POSTGRES_USER: app_admin
POSTGRES_PASSWORD: dev_password_change_me
ports:
- "127.0.0.1:5432:5432"
volumes:
- pgdata:/var/lib/postgresql/data
volumes:
pgdata:
เริ่มบริการ:
docker compose up -d
รหัสผ่านนี้ใช้สำหรับห้องปฏิบัติการในเครื่องเท่านั้น ห้ามนำไปใช้จริง
#3. สร้างตารางและข้อมูลตัวอย่าง
docker compose exec -T postgres psql -U app_admin -d shopdb <<'SQL'
CREATE TABLE IF NOT EXISTS products (
id BIGSERIAL PRIMARY KEY,
name TEXT NOT NULL,
category TEXT NOT NULL,
price NUMERIC(10,2) NOT NULL CHECK (price >= 0)
);
INSERT INTO products (name, category, price) VALUES
('Keyboard', 'Accessories', 990),
('Mouse', 'Accessories', 490),
('Monitor', 'Display', 4990);
SQL
#4. สร้างบัญชีอ่านข้อมูลอย่างเดียว
docker compose exec -T postgres psql -U app_admin -d shopdb <<'SQL'
CREATE ROLE mcp_reader LOGIN PASSWORD 'reader_password_change_me';
GRANT CONNECT ON DATABASE shopdb TO mcp_reader;
GRANT USAGE ON SCHEMA public TO mcp_reader;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO mcp_reader;
ALTER DEFAULT PRIVILEGES FOR ROLE app_admin IN SCHEMA public
GRANT SELECT ON TABLES TO mcp_reader;
ALTER ROLE mcp_reader SET default_transaction_read_only = on;
SQL
#5. กำหนด MCP ใน VS Code
สร้างไฟล์ .vscode/mcp.json ในโฟลเดอร์โปรเจกต์:
{
"servers": {
"postgres": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@yawlabs/postgres-mcp@latest"],
"env": {
"DATABASE_URL": "postgres://mcp_reader:reader_password_change_me@127.0.0.1:5432/shopdb",
"POSTGRES_STATEMENT_TIMEOUT_MS": "10000",
"POSTGRES_MAX_ROWS": "100"
}
}
}
}
บน Windows หาก npx เปิดไม่ได้ ให้ใช้ "command": "cmd" และ "args": ["/c", "npx", "-y", "@yawlabs/postgres-mcp@latest"] แทน
อย่า commit รหัสผ่านใน
.vscode/mcp.jsonขึ้น Git ให้ใช้ไฟล์ local ที่ไม่ติดตามด้วย Git หรือ secret/environment management ตามที่ MCP Client รองรับ
#6. เริ่มใช้งาน
เปิด MCP Server จากเมนู/คำสั่ง MCP ใน VS Code และอนุมัติการเชื่อมต่อ จากนั้นเปิด Copilot Chat ใน Agent mode และทดลองคำสั่ง:
แสดงรายชื่อตารางในฐานข้อมูล shopdbอธิบายโครงสร้างตาราง productsแสดงสินค้าที่ราคาเกิน 500 บาท โดยใช้เครื่องมือ PostgreSQL MCPสรุปราคาเฉลี่ยของสินค้าแยกตาม categoryช่วยอธิบาย EXPLAIN ของ SELECT * FROM products WHERE price > 500
ตัวอย่าง SQL ที่คาดว่าจะถูกสร้าง:
SELECT category, ROUND(AVG(price), 2) AS avg_price
FROM products
GROUP BY category
ORDER BY category;
#7. ตรวจสอบความปลอดภัย
ลองขอให้ Agent รัน DELETE FROM products; โดยใช้บัญชี mcp_reader คำสั่งต้องถูกปฏิเสธ เนื่องจากไม่ได้รับสิทธิ์ DELETE และกำหนด default transaction เป็น read-only
แนวปฏิบัติที่แนะนำ: จำกัดสิทธิ์เป็นราย schema/table, ใช้ฐานข้อมูลทดสอบหรือ read replica, กำหนด statement timeout, ไม่เปิดเผยข้อมูลส่วนบุคคลในผลลัพธ์, ตรวจสอบคำสั่ง SQL ที่ Agent จะเรียกใช้ และไม่เปิด ALLOW_WRITES=1 โดยไม่จำเป็น
#หมายเหตุเกี่ยวกับ MCP Server
ตัวอย่างใช้โครงการชุมชน @yawlabs/postgres-mcp ไม่ใช่เซิร์ฟเวอร์ PostgreSQL MCP อย่างเป็นทางการจาก PostgreSQL โครงการตัวอย่างเก่า @modelcontextprotocol/server-postgres อยู่ในคลัง archived แล้ว จึงควรประเมินการบำรุงรักษาและความปลอดภัยก่อนใช้งานจริง