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
- Create a new Database Webhook in the Dashboard.
- Give your Webhook a name.
- Select the table you want to hook into.
- 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.
_10create trigger "my_webhook" after insert_10on "public"."my_table" for each row_10execute 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 can be sent as POST
or GET
requests with a JSON payload.
Payload
The payload is automatically generated from the underlying table record:
_21type InsertPayload = {_21 type: 'INSERT'_21 table: string_21 schema: string_21 record: TableRecord<T>_21 old_record: null_21}_21type UpdatePayload = {_21 type: 'UPDATE'_21 table: string_21 schema: string_21 record: TableRecord<T>_21 old_record: TableRecord<T>_21}_21type 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