Prepare for the PgBouncer and IPv4 deprecations on 26th January 2024

Home

Database Webhooks

Trigger external payloads on database events.

Database Webhooks allow you to send real-time data from your database to another system whenever a table event occurs.

You can hook into three table events: INSERT, UPDATE, and DELETE. All events are fired after a database row is changed.

Webhooks vs triggers

Database Webhooks are very similar to triggers, and that's because Database Webhooks are just a convenience wrapper around triggers using the pg_net extension. This extension is asynchronous, and therefore will not block your database changes for long-running network requests.

This video demonstrates how you can create a new customer in Stripe each time a row is inserted into a profiles table:

Creating a webhook

  1. Create a new Database Webhook in the Dashboard.
  2. Give your Webhook a name.
  3. Select the table you want to hook into.
  4. Select one or more events (table inserts, updates, or deletes) you want to hook into.

Since webhooks are just database triggers, you can also create one from SQL statement directly.


_10
create trigger "my_webhook" after insert
_10
on "public"."my_table" for each row
_10
execute function "supabase_functions"."http_request"(
_10
'http://localhost:3000',
_10
'POST',
_10
'{"Content-Type":"application/json"}',
_10
'{}',
_10
'1000'
_10
);

We currently support HTTP webhooks. These are sent as a POST request with a JSON payload.

Payload

The payload is automatically generated from the underlying table record:


_21
type InsertPayload = {
_21
type: 'INSERT'
_21
table: string
_21
schema: string
_21
record: TableRecord<T>
_21
old_record: null
_21
}
_21
type UpdatePayload = {
_21
type: 'UPDATE'
_21
table: string
_21
schema: string
_21
record: TableRecord<T>
_21
old_record: TableRecord<T>
_21
}
_21
type DeletePayload = {
_21
type: 'DELETE'
_21
table: string
_21
schema: string
_21
record: null
_21
old_record: TableRecord<T>
_21
}

Monitoring

Logging history of webhook calls is available under the net schema of your database. For more info, see the GitHub Repo.

Resources

  • pg_net: an async networking extension for PostgreSQL