Realtime
Realtime 讓前端訂閱後端事件,而不必輪詢。最常用的是監聽某張表的 insert/update/delete,適合待辦清單、聊天、儀表板。
另外還有 Broadcast(對頻道送訊息)與 Presence(誰在線上)。入門先做資料表變更即可。
訂閱資料表
先在 Dashboard → Database → Publications 確認該表有加入 supabase_realtime。沒加入時,訂閱不會收到事件。
const channel = supabase
.channel('todos-changes')
.on(
'postgres_changes',
{ event: '*', schema: 'public', table: 'todos' },
(payload) => {
console.log(payload.eventType, payload.new, payload.old)
}
)
.subscribe()
event 可改成 'INSERT'、'UPDATE'、'DELETE'。payload.new 是新列,刪除時看 payload.old。
元件卸載時取消訂閱,避免重複連線:
權限仍然有效
Realtime 不會把 RLS 擋下的列推給使用者。訂閱者只能收到自己本來就讀得到的變更。若「資料庫有新列、畫面沒動」,先檢查 RLS 與 publication,再查頻道有沒有 SUBSCRIBED。
未登入的公開連線最長約 24 小時;已透過 Auth 升級的連線可較長時間維持。細節見官方 Realtime 指南。
相關資料
- 官方:Realtime
- 官方影片:Getting Started with Supabase Realtime
- 先把 CRUD 做穩再加訂閱:JavaScript Client 與 CRUD