mirror of
https://github.com/supabase/supabase.git
synced 2026-10-08 19:05:06 +03:00
Closes DOCS-1057 Contributes to DOCS-1052 ## I have read the [CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md) file. YES ## Problem We have hundreds of MDX lint warnings in our docs going against style best practices. ## Solution Remove and replace in context the following: - PostgreSQL. There was only one. There was concern about exceptions, but I found none. - Just - Quickly - Actually ### What changed Edits follow the [Google developer documentation style guide](https://developers.google.com/style): concise, direct, active voice. The flagged words were removed when the sentence still read well, or replaced when meaning needed to be preserved. ### Common patterns | Flagged word | Approach | Example | |---|---|---| | **just** (filler) | Removed | "you just installed" → "you installed" | | **just** (limiting) | **only** | "just one row" → "only one row" | | **just like** | **like** / **the same as** | "function just like regular users" → "function like regular users" | | **not just** | **not only** | "not just errors" → "not only errors" | | **quickly** (performance) | **efficiently** or removed | "find rows quickly" → "find rows efficiently" | | **quickly** (time) | **soon** / **rapidly** / removed | "expires too quickly" → "expires too soon" | | **actually** (filler) | Removed | "actually execute" → "execute"; "is actually the most common" → "is the most common" | ## Tophatting 1. See the diff. 2. See that content continues to make sense in context. 3. Locally, `cd apps/docs` and run `pnpm run lint:mdx`. 4. Search for "just," "actually," "quickly", and "PostgreSQL" and see there are 0 warnings. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Documentation** * Updated wording across quickstarts, guides, and troubleshooting articles for grammar, clarity, and consistent step-by-step phrasing. * Clarified key concepts including Row Level Security policy evaluation across Supabase products, deferred foreign key constraint behavior, and when `EXPLAIN ANALYZE` executes queries (and related side effects). * Refined several troubleshooting instructions and added guidance to cap log payload size to reduce billed Logs Ingest volume. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Nik Richers <nrichers@gmail.com> Co-authored-by: Chris Chinchilla <chris.ward@supabase.io>
100 lines
3.4 KiB
Plaintext
100 lines
3.4 KiB
Plaintext
---
|
|
id: 'webhooks'
|
|
title: 'Database Webhooks'
|
|
description: 'Trigger external payloads on database events.'
|
|
subtitle: 'Trigger external payloads on database events.'
|
|
tocVideo: 'codAs9-NeHM'
|
|
---
|
|
|
|
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 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:
|
|
|
|
<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](/dashboard/project/_/integrations/webhooks/overview) 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.
|
|
|
|
Since webhooks are database triggers, you can also create one from SQL statement directly.
|
|
|
|
```sql
|
|
create trigger "my_webhook" after insert
|
|
on "public"."my_table" for each row
|
|
execute function "supabase_functions"."http_request"(
|
|
'http://host.docker.internal:3000',
|
|
'POST',
|
|
'{"Content-Type":"application/json"}',
|
|
'{}',
|
|
'1000'
|
|
);
|
|
```
|
|
|
|
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:
|
|
|
|
```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>
|
|
}
|
|
```
|
|
|
|
## Monitoring
|
|
|
|
Logging history of webhook calls is available under the `net` schema of your database. For more info, see the [GitHub Repo](https://github.com/supabase/pg_net).
|
|
|
|
## Local development
|
|
|
|
When using Database Webhooks on your local Supabase instance, you need to be aware that the Postgres database runs inside a Docker container. This means that `localhost` or `127.0.0.1` in your webhook URL will refer to the container itself, not your host machine where your application is running.
|
|
|
|
To target services running on your host machine, use `host.docker.internal`. If that doesn't work, you may need to use your machine's local IP address instead.
|
|
|
|
For example, if you want to trigger an edge function when a webhook fires, your webhook URL would be:
|
|
|
|
```
|
|
http://host.docker.internal:54321/functions/v1/my-function-name
|
|
```
|
|
|
|
If you're experiencing connection issues with webhooks locally, verify you're using the correct hostname instead of `localhost`.
|
|
|
|
## Resources
|
|
|
|
- [pg_net](/docs/guides/database/extensions/pgnet): an async networking extension for Postgres
|