สอน Supabase ฉบับสมบูรณ์: จากสร้างโปรเจกต์ถึงใช้ MCP ให้ AI Agent จัดการฐานข้อมูลให้คุณโดยตรง
Supabase เป็นทางเลือกโอเพนซอร์สแทน Firebase เบื้องล่างเป็น PostgreSQL ตัวจริง การเปลี่ยนแปลงใหญ่ที่สุดของปี 2026 คือการผสาน MCP ทำให้ Claude Code, Cursor, Codex ค้นฐานข้อมูล รัน migration ดีพลอย Edge Function ได้โดยตรง บทความนี้ไล่จากสร้างโปรเจกต์ถึง RLS และ branch พร้อมชี้ว่ากับดักไหนทำให้ข้อมูลของคุณเปลือยกาย
วิศวกรที่ทำ side project คนหนึ่งเล่าให้ผมฟังว่า เขาใช้ AI สร้างเว็บระบบสมัครสมาชิก สามวันก็ขึ้นออนไลน์ รู้สึกว่าตัวเองเป็นอัจฉริยะ วันที่ห้าเขาพบว่ามีคนดาวน์โหลดตารางข้อมูลผู้ใช้ของเขาไปทั้งตาราง ไม่ใช่ถูกแฮก แต่เขาลืมเปิด Row Level Security และ anon key ก็เขียนอยู่ใน JavaScript ฝั่งหน้าบ้าน กด F12 ก็เห็น
บทเรียนนี้จะสอนตั้งแต่ต้นว่าใช้ Supabase อย่างไร แต่ผมอยากวางเรื่องนี้ไว้หน้าสุดก่อน: Supabase เริ่มใช้ง่าย และเกิดเรื่องก็ง่าย
Supabase คืออะไร
Supabase เป็นแพลตฟอร์มบริการแบ็กเอนด์โอเพนซอร์ส มักถูกเรียกว่า "ทางเลือกแทน Firebase" มันแพ็กแบ็กเอนด์ครบชุดให้คุณ: ฐานข้อมูล PostgreSQL, การยืนยันตัวตน, การเก็บไฟล์, การสมัครรับแบบเรียลไทม์, Edge Functions, REST และ GraphQL API ที่สร้างให้อัตโนมัติ
ความต่างสำคัญที่สุดจาก Firebase คือ: เบื้องล่างเป็น PostgreSQL ตัวจริง คุณเขียน SQL มาตรฐาน มี foreign key มี transaction มี view และ trigger หมายความว่าสองอย่าง หนึ่งความรู้ SQL เดิมของคุณใช้ได้เต็มที่ สองวันไหนอยากย้ายออก ก็ dump ฐานข้อมูลออกไปโยนขึ้น Postgres ตัวไหนก็ได้ ไม่ถูกล็อกไว้
การเปลี่ยนแปลงที่ควรจับตาที่สุดของ Supabase ในปี 2026 คือการผสาน AI ทางการออก MCP server ให้ coding agent อย่าง Claude Code, Cursor, Codex, Gemini CLI สั่งงานโปรเจกต์ของคุณได้โดยตรง อีกทั้งมีการผสาน ChatGPT เอกสารทางการระบุว่ามีราว 29 เครื่องมือ ครอบคลุมการรัน SQL แก้ schema เปิด branch ดีพลอย Edge Function ดูล็อกเรียลไทม์
มันทำอะไรได้บ้าง
แบ็กเอนด์ที่เว็บหรือแอปมือถือทั่วไปต้องใช้ Supabase แทบครอบคลุมหมด:
- Database: PostgreSQL พร้อม REST API ที่สร้างให้อัตโนมัติ
- Auth: email, รหัสผ่าน, magic link, OAuth อย่าง Google/GitHub/Apple
- Storage: อัปโหลดไฟล์และกระจายผ่าน CDN สิทธิ์ผสานกับนโยบายฐานข้อมูล
- Realtime: ผลักข้อมูลที่เปลี่ยนไปยังหน้าบ้านแบบเรียลไทม์
- Edge Functions: ฟังก์ชันไร้เซิร์ฟเวอร์บนสภาพแวดล้อม Deno
- Vector: ส่วนขยาย pgvector เอามาทำการค้นแบบเวกเตอร์ของ RAG ได้เลย
ข้อสุดท้ายนี้ใช้ได้จริงกับงาน AI คุณไม่ต้องซื้อฐานข้อมูลเวกเตอร์แยกเพื่อทำ RAG Postgres บวก pgvector พอสำหรับงานขนาดกลางและเล็กเต็มที่
วิธีใช้: จากสร้างโปรเจกต์ถึงคิวรีแรก
ขั้นแรก: สร้างโปรเจกต์
ไปสมัครที่ supabase.com สร้าง organization และ project สิ่งที่ต้องเลือกมีสามอย่าง:
- Region: เลือกที่ใกล้ผู้ใช้ที่สุด ผู้ใช้ในไทยแนะนำเลือก Singapore หรือ Tokyo เลือก us-east จะมีดีเลย์เพิ่มหนึ่งถึงสองร้อยมิลลิวินาที
- Database password: นี่คือรหัสผ่านซูเปอร์ยูสเซอร์ของฐานข้อมูล เก็บไว้ในตัวจัดการรหัสผ่าน อันนี้ไม่ใช่ API key
- แผน: Free เริ่มก่อนได้
การสร้างใช้เวลาหนึ่งถึงสองนาที เสร็จแล้วใน Project Settings > API จะเห็นกุญแจสองดอก:
anonkey: ออกแบบมาให้เป็นสาธารณะ จะวางไว้ในโค้ดหน้าบ้านservice_rolekey: ห้ามวางหน้าบ้านเด็ดขาด มันข้ามการตรวจสิทธิ์ทั้งหมด
ความต่างของกุญแจสองดอกนี้คือแนวคิดสำคัญที่สุดของทั้งบทเรียน
ขั้นสอง: สร้างตารางข้อมูล
ไปที่ Table Editor กด New table ยกตัวอย่างรายการสิ่งที่ต้องทำง่าย ๆ:
- ชื่อตาราง
todos - ช่อง:
id(int8, primary key, เพิ่มอัตโนมัติ, มีค่าเริ่มต้นอยู่แล้ว),user_id(uuid),title(text),done(bool, ค่าเริ่มต้น false),created_at(timestamptz, ค่าเริ่มต้น now())
ช่อง user_id สำคัญมาก มันจะถูกเอาไปเทียบกับ ID ของผู้ที่ล็อกอิน เพื่อตัดสินว่าใครเห็นรายการไหนได้ ตอนสร้างตารางอย่าลืมติ๊ก Enable Row Level Security ตอนนี้ Supabase เตือนคุณเป็นค่าเริ่มต้นแล้ว
สร้างด้วย SQL Editor โดยตรงก็ได้:
create table todos (
id bigint primary key generated always as identity,
user_id uuid references auth.users(id) not null,
title text not null,
done boolean default false,
created_at timestamptz default now()
);
alter table todos enable row level security;
ขั้นสาม: ตั้งนโยบาย RLS (ขั้นนี้ข้ามไม่ได้)
หลังเปิด RLS แล้ว ค่าเริ่มต้นคือ ห้ามทำทุกอย่าง คุณต้องเขียนชัด ๆ ว่าใครทำอะไรได้
ไปที่ Authentication > Policies หรือใช้ SQL ตรง ๆ:
-- อ่านได้เฉพาะรายการของตัวเอง
create policy "read own todos" on todos
for select using (auth.uid() = user_id);
-- เพิ่มได้เฉพาะข้อมูลที่ user_id เป็นของตัวเอง
create policy "insert own todos" on todos
for insert with check (auth.uid() = user_id);
-- แก้ได้เฉพาะของตัวเอง
create policy "update own todos" on todos
for update using (auth.uid() = user_id);
-- ลบได้เฉพาะของตัวเอง
create policy "delete own todos" on todos
for delete using (auth.uid() = user_id);
auth.uid() เป็นฟังก์ชันที่ Supabase ให้มา คืนค่า ID ของผู้ที่ล็อกอินอยู่ นโยบายสี่ข้อนี้รับประกันว่าแต่ละคนแตะได้เฉพาะข้อมูลของตัวเอง
เขียนเสร็จต้องทดสอบแน่นอน ล็อกอินด้วยสองบัญชีที่ต่างกัน ยืนยันว่า A มองไม่เห็นข้อมูลของ B จริง ๆ อย่าเชื่อว่า "ฉันเขียนนโยบายแล้วน่าจะถูก"
ขั้นสี่: เชื่อมจากหน้าบ้าน
ติดตั้ง SDK:
npm install @supabase/supabase-js
สร้าง client และคิวรี:
import { createClient } from '@supabase/supabase-js'
const supabase = createClient(
process.env.NEXT_PUBLIC_SUPABASE_URL,
process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY
)
// คิวรี (RLS จะคืนเฉพาะข้อมูลของคนคนนี้อัตโนมัติ)
const { data, error } = await supabase
.from('todos')
.select('*')
.order('created_at', { ascending: false })
// เพิ่ม
await supabase.from('todos').insert({ title: 'เขียนบทเรียน', user_id: user.id })
สังเกตว่าตรงนี้ใช้ anon key สิทธิ์ตัดสินโดย RLS ทั้งหมด หน้าบ้านดึงข้อมูลที่ไม่ควรดึงไม่ได้ เพราะชั้นฐานข้อมูลกันไว้แล้ว
ขั้นห้า: เพิ่มการล็อกอิน
// สมัครด้วย Email + รหัสผ่าน
await supabase.auth.signUp({ email, password })
// ล็อกอิน
await supabase.auth.signInWithPassword({ email, password })
// ล็อกอินด้วย Google
await supabase.auth.signInWithOAuth({ provider: 'google' })
ผู้ให้บริการ OAuth ต้องไปเปิดที่ Authentication > Providers ก่อนและกรอก client ID กับ secret ของแพลตฟอร์มนั้น การตั้งค่า Google ต้องไปสร้าง OAuth credential ที่ Google Cloud Console อย่าลืมกรอก callback URL ที่ Supabase ให้มาเข้าไปด้วย
เทคนิคขั้นสูง
ใช้ MCP ให้ AI Agent จัดการฐานข้อมูล
นี่คือของใหม่ที่ใช้ได้จริงที่สุดของปี 2026 หลังติดตั้ง Supabase MCP server แล้ว Claude (คู่กับ สอน Claude Code), Cursor เอเจนต์เหล่านี้ค้นฐานข้อมูล สร้าง migration ดีพลอย Edge Function ได้โดยตรง อีกทั้งทางการแพ็ก agent skills มาด้วย เอเจนต์จะทำตามแนวปฏิบัติที่ดีที่สุดแทนการแก้มั่ว
ความต่างที่รู้สึกได้จริง: เมื่อก่อนคุณต้องอธิบายให้ AI ฟังว่า "ตารางข้อมูลของฉันหน้าตาแบบนี้ มีช่องเหล่านี้" ตอนนี้มันไปดูเอง ตอนแก้ schema มันจะสร้างไฟล์ migration แทนการสั่ง ALTER TABLE ตรง ๆ
แต่ขอให้ต่อเข้ากับ branch พัฒนาหรือพรีวิวเท่านั้น ให้ AI Agent ต่อฐานข้อมูลจริงโดยตรง คำสั่งที่เข้าใจผิดคำสั่งเดียวก็อาจลบของทิ้งได้ กระบวนการที่ถูกคือเอเจนต์แก้บน branch แล้ว migration ที่คุณ review ผ่านจึงค่อยรวมเข้าสภาพแวดล้อมจริง
การแตก branch ฐานข้อมูล
branching ของ Supabase ให้คุณเปิด branch ฐานข้อมูลอิสระเพื่อทดสอบการเปลี่ยน schema ยืนยันว่าไม่มีปัญหาแล้วค่อยรวมกลับสภาพแวดล้อมจริง เรื่องค่าใช้จ่ายไม่มีค่ารายเดือนตายตัว branch พรีวิวรันบน Micro compute ราวชั่วโมงละ 0.01344 ดอลลาร์สหรัฐ เปิดวันละแปดชั่วโมงราว 0.11 ดอลลาร์สหรัฐ ถูกมาก
ใช้คู่กับ MCP เข้ากันสุด ๆ เอเจนต์แก้บน branch ตามใจ ยังไงพังก็ลบทิ้งเปิดใหม่
Edge Functions
ตรรกะที่ต้องรันบนแบ็กเอนด์ (เรียก API บุคคลที่สาม จัดการ webhook ซ่อนกุญแจลับ) วางที่นี่:
supabase functions new send-notification
supabase functions deploy send-notification
สภาพแวดล้อมการรันเป็น Deno เขียน TypeScript งานที่ต้องใช้ service_role key (เช่นฟังก์ชันผู้ดูแลระบบ) ก็วางที่นี่ ห้ามวางหน้าบ้านเด็ดขาด
pgvector ทำ RAG
create extension if not exists vector;
create table documents (
id bigserial primary key,
content text,
embedding vector(1536)
);
create index on documents using ivfflat (embedding vector_cosine_ops);
จากนั้นใช้ SQL ทำการค้นความคล้ายได้เลย งาน RAG ขนาดกลางและเล็กแบบนี้ก็พอ ไม่ต้องนำเข้า Pinecone หรือ Qdrant แยก
ข้อควรระวัง
RLS คือแนวป้องกันเดียวของคุณ ขอย้ำอีกครั้ง anon key เป็นสาธารณะ มองเห็นในซอร์สโค้ดหน้าบ้าน นี่คือการออกแบบเช่นนั้น สิทธิ์พึ่ง RLS ทั้งหมด ก่อนขึ้นออนไลน์ตรวจทีละตารางว่าเปิด RLS และนโยบายถูกต้อง แผงหลังของ Supabase จะแสดงคำเตือนต่อตารางสาธารณะที่ไม่เปิด RLS อย่ามองข้าม
service_role key ห้ามเข้าหน้าบ้านเด็ดขาด มันข้าม RLS ทั้งหมด วางได้เฉพาะใน Edge Functions เซิร์ฟเวอร์แบ็กเอนด์ หรือตัวแปรสภาพแวดล้อมของ CI ก่อน commit เข้า git ตรวจอีกครั้ง
แผนฟรีจะถูกพัก โปรเจกต์ที่ว่างไประยะหนึ่งจะถูก pause ต้องปลุกด้วยมือ ผลิตภัณฑ์ที่มีผู้ใช้จริงโปรดขึ้น Pro (เดือนละ 25 ดอลลาร์สหรัฐ) เป็นอย่างน้อย
รายการเสริมต้องระวัง PITR การกู้คืน ณ จุดเวลา 100 ดอลลาร์สหรัฐต่อ 7 วัน โดเมนกำหนดเอง 10 ดอลลาร์สหรัฐ MFA ขั้นสูงโปรเจกต์แรก 75 ดอลลาร์สหรัฐ ราคาต่อหน่วยไม่ต่ำ ก่อนเปิดยืนยันว่าจำเป็นจริง
ที่ตั้งข้อมูล ตอนเลือก region ต้องพิจารณาไม่ใช่แค่ดีเลย์ ถ้าบริการของคุณเกี่ยวกับข้อมูลส่วนบุคคลและมีข้อกำหนดเรื่องที่ตั้งข้อมูล ต้องยืนยันว่าภูมิภาคที่เลือกสอดคล้องกฎ ปัจจุบันไทยยังไม่มีภูมิภาคของ Supabase ที่ใกล้ที่สุดคือ Singapore และ Tokyo
ความเห็นจาก TheAI Academy
คุณูปการที่สุดของ Supabase หลายปีมานี้ คือทำให้ "คนคนเดียวทำผลิตภัณฑ์ครบทั้งตัวได้" เป็นจริงขึ้นมา เมื่อก่อนคุณต้องเป็นแบ็กเอนด์ ต้องตั้งฐานข้อมูล ต้องจัดการล็อกอิน ตอนนี้เหล่านี้เป็นแค่การตั้งค่า บวกกับการผสาน MCP ปี 2026 AI Agent จัดการฐานข้อมูลได้โดยตรง ความเร็วในการพัฒนายิ่งขึ้นไปอีกระดับ
แต่ผมต้องพูดอีกด้านอย่างซื่อสัตย์: มันทำให้คนที่ไม่เข้าใจฐานข้อมูลก็ผลักฐานข้อมูลขึ้นออนไลน์ได้ และนี่แหละคือจุดเสี่ยง วิศวกรคนนั้นไม่ได้โง่ เขาแค่ไม่รู้ว่า key ฝั่งหน้าบ้านเป็นสาธารณะ เครื่องมือลดเกณฑ์ลง แต่ผลของข้อมูลรั่วไม่ได้ลดตาม
คำแนะนำของผมง่ายมาก: คุณใช้ AI เขียนโค้ด 90% ได้ แต่ส่วนนโยบาย RLS ขอให้อ่านให้เข้าใจเอง ทดสอบเอง นี่คือสิ่งที่ "ผิดแล้วไม่มีโอกาสครั้งที่สอง"
ความเห็น: Supabase เป็นตัวเลือกแบ็กเอนด์ที่แข็งที่สุดสำหรับนักพัฒนาส่วนบุคคลตอนนี้ แต่ขอให้ทำ "ตรวจ RLS" เป็นข้อแรกของเช็กลิสต์ก่อนขึ้นออนไลน์ ไม่ใช่ข้อสุดท้าย
คำแนะนำที่เป็นรูปธรรมสำหรับผู้อ่านชาวไทย: ใช้แผนฟรีทำโปรเจกต์เล็กที่มีล็อกอินก่อน ตั้งใจทดสอบการแยกข้อมูลด้วยสองบัญชี เห็น RLS ทำงานกับตาแล้วค่อยทำต่อ อยากต่อ AI Agent ก็เปิด branch ฝึกก่อน ยืนยันว่าโฟลว์ลื่นแล้วค่อยพิจารณาแตะสภาพแวดล้อมจริง แนวคิดด้านความปลอดภัยที่เกี่ยวข้องอ่านคู่กับ เช็กลิสต์ความปลอดภัยแอป LLM ได้
แหล่งข้อมูล
เรียบเรียงจากข้อมูลสาธารณะ ฟีเจอร์และราคายึดตามเอกสารทางการ
คำถามที่พบบ่อย
Supabase กับ Firebase ควรเลือกอย่างไร
ความต่างที่สุดคือโมเดลข้อมูล Supabase เบื้องล่างเป็น PostgreSQL คุณเขียน SQL มาตรฐาน มีความสัมพันธ์และทรานแซกชัน ต่อไปจะย้ายไป Postgres ที่โฮสต์เองแทบไม่มีต้นทุนย้าย Firebase เป็น NoSQL การซิงก์เรียลไทม์และ SDK ฝั่งมือถือสมบูรณ์กว่า ต้องการข้อมูลเชิงสัมพันธ์ รายงาน คิวรีซับซ้อนเลือก Supabase ต้องการแอปมือถือซิงก์เรียลไทม์เลือก Firebase
ไม่เปิด RLS จะเป็นอย่างไร
ข้อมูลของคุณจะเป็นสาธารณะทันที anon key ของ Supabase ออกแบบมาให้วางหน้าบ้าน สิทธิ์พึ่งนโยบาย Row Level Security กำกับทั้งหมด ไม่เปิด RLS เท่ากับใครก็ตามที่ได้ anon key ของคุณ (มองเห็นในซอร์สโค้ดหน้าบ้าน) อ่านเขียนตารางทั้งตารางได้ นี่คือสาเหตุที่พบบ่อยที่สุดของข้อมูลโปรเจกต์ Supabase รั่ว ก่อนขึ้นออนไลน์ต้องยืนยันทีละตาราง
การผสาน MCP ปลอดภัยไหม
ขึ้นกับว่าคุณให้สิทธิ์อะไรกับมัน MCP server ให้ AI Agent รัน SQL แก้ schema ดีพลอยฟังก์ชันได้ สะดวกมากบน branch พัฒนา แต่ต่อสภาพแวดล้อมจริงโดยตรงเสี่ยงสูง แนะนำให้ต่อ MCP เข้ากับ branch พัฒนาหรือพรีวิวเท่านั้น การเปลี่ยนแปลงสภาพแวดล้อมจริงเดินผ่านกระบวนการ migration ที่มีการทบทวนด้วยคน
แผนฟรีเอามาขึ้นออนไลน์ได้ไหม
โปรเจกต์เล็กได้ แต่ต้องยอมรับข้อจำกัดสองอย่าง: โปรเจกต์ที่ว่างไประยะหนึ่งจะถูกพัก (ต้องปลุกด้วยมือ) และเพดานทรัพยากรต่ำ ผลิตภัณฑ์ที่มีผู้ใช้จริงแนะนำขึ้น Pro (เดือนละ 25 ดอลลาร์สหรัฐ) เป็นอย่างน้อย จึงจะมีการสำรองข้อมูล ไม่ถูกพัก และมีโควตาทรัพยากรที่สมเหตุสมผลกว่า