mirror of
https://github.com/supabase/supabase.git
synced 2026-06-22 21:16:29 +08:00
99 lines
2.4 KiB
Plaintext
99 lines
2.4 KiB
Plaintext
---
|
|
id: replication
|
|
title: 'Replication'
|
|
slug: replication
|
|
---
|
|
|
|
import Tabs from '@theme/Tabs'
|
|
import TabItem from '@theme/TabItem'
|
|
|
|
Replication is a technique for copying the data from one database to another. Supabase uses replication functionality to provide a real-time API. Replication is useful for:
|
|
|
|
- Spreading out the "load." For example, if your database has a lot of reads, you might want to split it between two databases.
|
|
- Reducing latency. For example, you may want one database in London to serve your European customers, and one in New York to serve the US.
|
|
|
|
Replication is done through _publications_, a method of choosing which changes to send to other systems (usually another Postgres database). Publications can be managed in the [Dashboard](https://app.supabase.com) or with SQL.
|
|
|
|
## Manage publications in the Dashboard
|
|
|
|
1. Go to the [Database](https://app.supabase.com/project/_/database/tables) page in the Dashboard.
|
|
2. Click on **Replication** in the sidebar.
|
|
3. Control which database events are sent by toggling **Insert**, **Update**, and **Delete**.
|
|
4. Control which tables broadcast changes by selecting **Source** and toggling each table.
|
|
|
|
<video width="99%" muted playsInline controls="true">
|
|
<source
|
|
src="/docs/videos/api/api-realtime.mp4"
|
|
type="video/mp4"
|
|
muted
|
|
playsInline
|
|
/>
|
|
</video>
|
|
|
|
## Create a publication
|
|
|
|
This publication contains changes to all tables.
|
|
|
|
```sql
|
|
create publication publication_name
|
|
for all tables;
|
|
```
|
|
|
|
## Create a publication to listen to individual tables
|
|
|
|
```sql
|
|
create publication publication_name
|
|
for table table_one, table_two;
|
|
```
|
|
|
|
## Add tables to an existing publication
|
|
|
|
```sql
|
|
alter publication publication_name
|
|
add table table_name;
|
|
```
|
|
|
|
## Listen to `insert`
|
|
|
|
```sql
|
|
create publication publication_name
|
|
for all tables
|
|
with (publish = 'insert');
|
|
```
|
|
|
|
## Listen to `update`
|
|
|
|
```sql
|
|
create publication publication_name
|
|
for all tables
|
|
with (publish = 'update');
|
|
```
|
|
|
|
## Listen to `delete`
|
|
|
|
```sql
|
|
create publication publication_name
|
|
for all tables
|
|
with (publish = 'delete');
|
|
```
|
|
|
|
## Remove a publication
|
|
|
|
```sql
|
|
drop publication if exists publication_name;
|
|
```
|
|
|
|
## Recreate a publication
|
|
|
|
If you're recreating a publication, it's best to do it in a transaction to ensure the operation succeeds.
|
|
|
|
```sql
|
|
begin;
|
|
-- remove the realtime publication
|
|
drop publication if exists publication_name;
|
|
|
|
-- re-create the publication but don't enable it for any tables
|
|
create publication publication_name;
|
|
commit;
|
|
```
|