Skip to content

建立 2026-09-14 更新 2026-09-14

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

元件卸載時取消訂閱,避免重複連線:

await supabase.removeChannel(channel)

權限仍然有效

Realtime 不會把 RLS 擋下的列推給使用者。訂閱者只能收到自己本來就讀得到的變更。若「資料庫有新列、畫面沒動」,先檢查 RLS 與 publication,再查頻道有沒有 SUBSCRIBED

未登入的公開連線最長約 24 小時;已透過 Auth 升級的連線可較長時間維持。細節見官方 Realtime 指南。

相關資料