---
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;
```
