mirror of
https://github.com/supabase/supabase.git
synced 2026-10-09 11:25:06 +03:00
77 lines
2.3 KiB
Plaintext
77 lines
2.3 KiB
Plaintext
import Layout from '~/layouts/DefaultGuideLayout'
|
|
|
|
export const meta = {
|
|
id: 'webhooks',
|
|
title: 'Database Webhooks',
|
|
description: '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.
|
|
|
|
Database Webhooks are very similar to triggers, and that's because Database Webhooks are just a convenience wrapper around triggers
|
|
using the [pg_net](/docs/guides/database/extensions/pgnet) 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:
|
|
|
|
<Admonition type="note">
|
|
|
|
Database Webhooks were previously known as Function Hooks.
|
|
|
|
</Admonition>
|
|
|
|
<div className="video-container">
|
|
<iframe
|
|
src="https://www.youtube-nocookie.com/embed/codAs9-NeHM"
|
|
frameBorder="1"
|
|
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
|
|
allowFullScreen
|
|
></iframe>
|
|
</div>
|
|
|
|
## Creating a webhook
|
|
|
|
1. Create a new [Database Webhook](https://app.supabase.com/project/_/database/hooks) in the Dashboard.
|
|
1. Give your Webhook a name.
|
|
1. Select the table you want to hook into.
|
|
1. Select one or more events (table inserts, updates, or deletes) you want to hook into.
|
|
|
|
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:
|
|
|
|
```typescript
|
|
type InsertPayload = {
|
|
type: 'INSERT'
|
|
table: string
|
|
schema: string
|
|
record: TableRecord<T>
|
|
old_record: null
|
|
}
|
|
type UpdatePayload = {
|
|
type: 'UPDATE'
|
|
table: string
|
|
schema: string
|
|
record: TableRecord<T>
|
|
old_record: TableRecord<T>
|
|
}
|
|
type DeletePayload = {
|
|
type: 'DELETE'
|
|
table: string
|
|
schema: string
|
|
record: null
|
|
old_record: TableRecord<T>
|
|
}
|
|
```
|
|
|
|
## Resources
|
|
|
|
- [pg_net](/docs/guides/database/extensions/pgnet): an async networking extension for PostgreSQL
|
|
|
|
export const Page = ({ children }) => <Layout meta={meta} children={children} />
|
|
|
|
export default Page
|