Bird
Raised Fist0
Supabasecloud~30 mins

Subscribing to database changes in Supabase - Mini Project: Build & Apply

Choose your learning style10 modes available
Subscribing to database changes
📖 Scenario: You are building a simple web app that needs to react instantly when new messages are added to a chat database table. Instead of refreshing the page, you want to listen for new messages as they arrive.
🎯 Goal: Create a Supabase client, subscribe to new inserts on the messages table, and log the new message data when it arrives.
📋 What You'll Learn
Create a Supabase client connected to your project URL and anon key
Subscribe to INSERT events on the messages table
Log the new message data inside the subscription callback
💡 Why This Matters
🌍 Real World
Real-time apps like chat, notifications, or live dashboards need to react instantly to database changes without refreshing the page.
💼 Career
Understanding how to subscribe to database changes is key for building responsive, event-driven applications in modern cloud environments.
Progress0 / 4 steps
1
Create Supabase client
Create a variable called supabase by calling createClient with the exact URL 'https://xyzcompany.supabase.co' and anon key 'public-anon-key'.
Supabase
Hint

Use createClient from @supabase/supabase-js with the given URL and key.

2
Set up subscription to new messages
Create a variable called subscription by calling supabase.channel('public:messages') and chaining .on('postgres_changes', { event: 'INSERT', schema: 'public', table: 'messages' }, callback) where callback is a function that receives payload and logs payload.new.
Supabase
Hint

Use supabase.channel with the channel name 'public:messages'. Then use .on with event 'INSERT' on the messages table. The callback logs payload.new.

3
Subscribe to the channel
Call subscription.subscribe() to start listening for new message inserts.
Supabase
Hint

Call subscribe() on the subscription variable to activate the listener.

4
Unsubscribe when done
Add a line to unsubscribe from the channel by calling subscription.unsubscribe() when you no longer want to listen for new messages.
Supabase
Hint

Call unsubscribe() on the subscription variable to stop listening.

Practice

(1/5)
1. What does subscribing to database changes in Supabase help your app do?
easy
A. Keep app data live and updated automatically
B. Manually refresh data by reloading the page
C. Store data permanently on the client device
D. Encrypt data before sending to the database

Solution

  1. Step 1: Understand the purpose of subscriptions

    Subscriptions listen for database changes and update the app data live.
  2. Step 2: Compare options with subscription benefits

    Only Keep app data live and updated automatically describes automatic live updates, matching subscription behavior.
  3. Final Answer:

    Keep app data live and updated automatically -> Option A
  4. Quick Check:

    Subscriptions = live data updates [OK]
Hint: Subscriptions keep data live without manual refresh [OK]
Common Mistakes:
  • Thinking subscriptions store data locally
  • Confusing subscriptions with manual refresh
  • Assuming subscriptions encrypt data
2. Which of the following is the correct syntax to subscribe to INSERT events on the 'messages' table in Supabase?
easy
A. supabase.from('messages').on('UPDATE', callback).subscribe()
B. supabase.from('messages').on('INSERT', callback).subscribe()
C. supabase.table('messages').listen('INSERT', callback).subscribe()
D. supabase.listen('messages').on('INSERT', callback).subscribe()

Solution

  1. Step 1: Recall correct Supabase subscription syntax

    The correct method is supabase.from('table').on('EVENT', callback).subscribe().
  2. Step 2: Match syntax to options

    supabase.from('messages').on('INSERT', callback).subscribe() matches this syntax with 'messages' and 'INSERT' event.
  3. Final Answer:

    supabase.from('messages').on('INSERT', callback).subscribe() -> Option B
  4. Quick Check:

    Correct syntax = supabase.from('messages').on('INSERT', callback).subscribe() [OK]
Hint: Use .from('table').on('EVENT', callback).subscribe() [OK]
Common Mistakes:
  • Using .table() instead of .from()
  • Listening to wrong event type
  • Incorrect method chaining order
3. Given the code below, what will be logged when a new row is inserted into the 'tasks' table?
supabase.from('tasks').on('INSERT', payload => {
  console.log('New task:', payload.new);
}).subscribe()
medium
A. New task: undefined
B. No output because subscription is missing
C. Error: callback not defined
D. New task: [object Object] with new row data

Solution

  1. Step 1: Understand the callback payload on INSERT

    The payload contains a 'new' property with the inserted row data as an object.
  2. Step 2: Analyze console.log output

    Logging 'New task:' plus payload.new prints the object as '[object Object]' in console.
  3. Final Answer:

    New task: [object Object] with new row data -> Option D
  4. Quick Check:

    Payload.new logs inserted row object [OK]
Hint: payload.new holds inserted row data object [OK]
Common Mistakes:
  • Expecting payload.new to be undefined
  • Confusing payload.new with payload.old
  • Assuming subscription needs extra setup to log
4. What is wrong with this subscription code?
const subscription = supabase.from('orders').on('DELETE', () => {
  console.log('Order deleted');
})
medium
A. Missing .subscribe() call to activate subscription
B. Wrong event type; should be 'REMOVE' instead of 'DELETE'
C. Callback function must receive a payload parameter
D. Subscription must be assigned to a variable named 'sub'

Solution

  1. Step 1: Check subscription activation

    The .subscribe() method is required to start listening to events.
  2. Step 2: Verify event type and callback

    'DELETE' is a valid event, and callback can omit payload if unused.
  3. Final Answer:

    Missing .subscribe() call to activate subscription -> Option A
  4. Quick Check:

    Always call .subscribe() to activate [OK]
Hint: Always end with .subscribe() to start listening [OK]
Common Mistakes:
  • Forgetting .subscribe() call
  • Using wrong event names
  • Thinking callback must have parameters
5. You want to subscribe to both INSERT and UPDATE events on the 'profiles' table and log the changed row each time. Which code correctly achieves this?
hard
A. supabase.from('profiles').on('INSERT,UPDATE', payload => console.log(payload.new)).subscribe()
B. supabase.from('profiles').on(['INSERT', 'UPDATE'], payload => console.log(payload.new)).subscribe()
C. supabase.from('profiles').on('INSERT', payload => console.log(payload.new)).on('UPDATE', payload => console.log(payload.new)).subscribe()
D. supabase.from('profiles').on('INSERT').on('UPDATE', payload => console.log(payload.new)).subscribe()

Solution

  1. Step 1: Understand event subscription chaining

    Supabase allows chaining .on() calls for different events before .subscribe().
  2. Step 2: Evaluate each option's syntax

    supabase.from('profiles').on('INSERT', payload => console.log(payload.new)).on('UPDATE', payload => console.log(payload.new)).subscribe() chains .on('INSERT', ...).on('UPDATE', ...) correctly; others use invalid event formats.
  3. Final Answer:

    supabase.from('profiles').on('INSERT', payload => console.log(payload.new)).on('UPDATE', payload => console.log(payload.new)).subscribe() -> Option C
  4. Quick Check:

    Chain .on() for multiple events [OK]
Hint: Chain .on() calls for each event before .subscribe() [OK]
Common Mistakes:
  • Trying to pass multiple events as array or comma string
  • Calling .subscribe() too early
  • Not chaining .on() properly
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard