# Read Replicas {#read-replicas}


Configure read replicas for database scaling.


## Overview {#overview}


Read replicas offload read queries from the primary database, improving performance for read-heavy workloads.





```mermaid
graph LR
    API[API Write Requests] --> Primary[(Primary DB)]
    API2[API Read Requests] --> Replica[(Read Replica)]
    Primary -->|Replication| Replica
```






## PostgreSQL Streaming Replication {#postgresql-streaming-replication}



### Primary Configuration {#primary-configuration}


```ini
# postgresql.conf
wal_level = replica
max_wal_senders = 5
wal_keep_size = '1GB'
```


### Replica Configuration {#replica-configuration}


```bash
# Create replica from primary
pg_basebackup -h primary-host -D /var/lib/postgresql/data -U replication -P

# recovery.conf (or standby.signal in PG12+)
primary_conninfo = 'host=primary-host port=5432 user=replication password=secret'
```


## TypeORM Configuration {#typeorm-configuration}


```typescript
// ormconfig.ts
{
  type: 'postgres',
  replication: {
    master: {
      host: process.env.DB_HOST,
      port: 5432,
      username: process.env.DB_USER,
      password: process.env.DB_PASS,
      database: process.env.DB_NAME,
    },
    slaves: [
      {
        host: process.env.DB_REPLICA_HOST,
        port: 5432,
        username: process.env.DB_USER,
        password: process.env.DB_PASS,
        database: process.env.DB_NAME,
      },
    ],
  },
}
```


## Query Routing {#query-routing}


TypeORM automatically routes:

- **Writes** (INSERT, UPDATE, DELETE) → Primary
- **Reads** (SELECT) → Replicas (round-robin)


## Related Pages {#related-pages}


- [Connection Pooling](https://sourcey-gauzy.pages.dev/database/connection-pooling/index.md) — pool config
- [Indexing Strategy](https://sourcey-gauzy.pages.dev/database/indexing-strategy/index.md) — query performance
- [Auto-Scaling](https://sourcey-gauzy.pages.dev/devops/auto-scaling/index.md) — scaling
