Render Managed PostgreSQL
This skill covers Managed Postgres on Render: how to connect, what cannot change after creation, storage behavior, limits, HA, replicas, and safe deletion. Deep dives live under references/.
When to Use
Apply this skill when the user:
- Configures Postgres for an app on Render (URLs, TLS, pooling)
- Creates or changes a database, plan, disk, or replicas
- Asks about backups, PITR, exports, or deleting a database
- Hits connection limits, SSL errors, or latency between services and DB
- Authors Blueprint
databases / readReplicas or wires fromDatabase
For deploy flows and Blueprint basics, see render-deploy and render-blueprints. For private networking between services, see render-networking. For env var patterns, see render-env-vars.
Connection Patterns
Render exposes two connection URLs for the same logical database:
| URL |
Use when |
TLS |
| Internal |
App or service on Render in the same region and workspace |
Not required (private network) |
| External |
Local development, CI, or tools outside Render |
Required (TLS 1.2+) |
Always prefer the internal URL for Render-hosted apps so traffic stays on Render’s network and avoids extra latency and public egress patterns.
- IP allow list applies to external access only. Same-region Render services use the internal URL regardless of the allow list.
- External clients must use TLS; misconfigured clients often show SSL handshake or
sslmode errors.
URL formats, Dashboard locations, Blueprint fromDatabase, pooling, and common mistakes: references/connection-guide.md.
Creation and Setup
- Instance display name: Can be changed later (where the Dashboard allows renaming the resource).
- Immutable after creation:
databaseName, database user, region, PostgreSQL major version. Plan these before create; changing them requires a new database and migration.
- Storage size: 1 GB or multiples of 5 GB when provisioning.
Wire apps with Blueprint fromDatabase using property: connectionString (or host, port, user, password, database individually). See render-blueprints.
Multiple logical databases
You can run CREATE DATABASE new_db; in psql on the same instance. Host, port, and credentials stay the same; only the database name in the URL path changes (e.g. .../myapp vs .../new_db).
Storage Management
- Autoscaling: When disk use reaches roughly ~90%, Render can grow storage by about ~50%, rounded up to the next 5 GB multiple, up to 16 TB max.
- Cannot shrink disk after an increase.
- Cooldown: After a storage increase, you cannot increase again for 12 hours.
- Over limit / unhealthy: If disk is over the configured limit, the database can become unhealthy; Render may suspend it until resolved.
Monitor disk and plan exports or cleanup before you hit hard limits. Backup and restore options: references/backup-and-recovery.md.
Connection Limits
Maximum connections depend on instance RAM (current-generation plans):
| RAM |
Max connections (typical) |
| Under 8 GB |
100 |
| 8 GB |
200 |
| 16 GB |
400 |
| 32 GB and above |
500 |
Legacy database plans may have lower limits; confirm in the Dashboard or API for the specific plan.
Render provides integrated PgBouncer connection pooling for paid Postgres instances. Enable it with connectionPool: pgbouncer in a Blueprint, then connect clients with the database's connectionPoolString. Keep application pool sizes aligned with the database connection limit; clients that require session-level state or dedicated long-lived connections must use the direct connection string. Enabling the managed pool restarts the database and causes a few minutes of unavailability. More detail: references/connection-guide.md and references/performance-tuning.md.
High Availability
High availability (HA) is available when:
- Database uses a Pro or Accelerated instance type, and
- PostgreSQL 13+
Instance type changes cause brief downtime. With HA, downtime is typically less than without HA (often on the order of minutes without HA—exact duration depends on plan and operation).
One-way migration off legacy types: After moving to current-generation instance types, you cannot move back to legacy instance types.
Read Replicas
- Up to 5 read replicas per database.
- In Blueprints, declare replicas under
readReplicas as a list of names.
- CAUTION — declarative sync:
- An empty
readReplicas list can destroy all existing replicas.
- Name mismatches between the Blueprint and live replicas can create new replicas and remove replicas whose names are no longer listed.
Always treat readReplicas as authoritative desired state, not additive-only.
Useful MCP Commands
Use the Render MCP tools (names may vary slightly by integration; align with your server’s tool list):
| Goal |
Tool / pattern |
| List databases |
list_postgres_instances |
| Instance details |
get_postgres with postgresId |
| Read-only SQL |
query_render_postgres with postgresId and sql |
| Connection load |
get_metrics with resourceId (Postgres ID) and metricTypes: ["active_connections"] |
query_render_postgres runs in a read-only transaction and opens a new connection per query—do not use it as a substitute for app pooling.
Shorthand (same tools): list_postgres_instances(), get_postgres(postgresId), query_render_postgres(postgresId, sql), get_metrics(resourceId, metricTypes: ["active_connections"]).
Deleting and Data Safety
- Backups and snapshots are not retained after you delete the database. Export first (
pg_dump, Dashboard restore workflow from existing backups, etc.).
- Before destructive actions, confirm retention and recovery paths in
references/backup-and-recovery.md.
References
| Document |
Contents |
references/connection-guide.md |
Internal vs external URLs, SSL, allow list, Blueprint wiring, pooling, multi-database URLs, troubleshooting |
references/backup-and-recovery.md |
Snapshots, PITR, pg_dump / pg_restore, restore flows, deletion, cross-region |
references/performance-tuning.md |
pg_stat_statements, indexes, bloat, EXPLAIN ANALYZE, metrics, scaling |
Related Skills
- render-deploy — End-to-end deploy, services, and MCP/Dashboard flows
- render-blueprints —
databases, fromDatabase, readReplicas, immutable fields
- render-networking — Private services, regions, and how traffic routes between resources
- render-env-vars — Storing
DATABASE_URL and secret wiring patterns
1---2name: render-postgres3description: Sets up and optimizes Managed PostgreSQL on Render—connection strings (internal vs external), creation constraints, storage autoscaling, connection limits, high availability, read replicas, backups, and MCP inspection. Use when the user mentions Postgres, PostgreSQL, Render database, connection string, DATABASE_URL, backups, snapshots, replicas, HA, disk storage, connection pooling, or troubleshooting DB connectivity.4license: MIT5---6
7# Render Managed PostgreSQL
8
9This skill covers **Managed Postgres on Render**: how to connect, what cannot change after creation, storage behavior, limits, HA, replicas, and safe deletion. Deep dives live under `references/`.
10
11## When to Use
12
13Apply this skill when the user:
14
15- Configures **Postgres** for an app on Render (URLs, TLS, pooling)
16- Creates or changes a **database**, **plan**, **disk**, or **replicas**
17- Asks about **backups**, **PITR**, **exports**, or **deleting** a database
18- Hits **connection limits**, **SSL errors**, or **latency** between services and DB
19- Authors **Blueprint** `databases` / `readReplicas` or wires `fromDatabase`
20
21For deploy flows and Blueprint basics, see **render-deploy** and **render-blueprints**. For private networking between services, see **render-networking**. For env var patterns, see **render-env-vars**.
22
23## Connection Patterns
24
25Render exposes **two connection URLs** for the same logical database:
26
27| URL | Use when | TLS |
28|-----|----------|-----|
29| **Internal** | App or service on Render in the **same region and workspace** | Not required (private network) |
30| **External** | Local development, CI, or tools outside Render | **Required** (TLS 1.2+) |
31
32**Always prefer the internal URL for Render-hosted apps** so traffic stays on Render’s network and avoids extra latency and public egress patterns.
33
34- **IP allow list** applies to **external** access only. Same-region Render services use the **internal** URL regardless of the allow list.
35- **External** clients must use TLS; misconfigured clients often show SSL handshake or `sslmode` errors.
36
37URL formats, Dashboard locations, Blueprint `fromDatabase`, pooling, and common mistakes: `references/connection-guide.md`.
38
39## Creation and Setup
40
41- **Instance display name**: Can be changed later (where the Dashboard allows renaming the resource).
42- **Immutable after creation**: `databaseName`, database **user**, **region**, **PostgreSQL major version**. Plan these before create; changing them requires a new database and migration.
43- **Storage size**: **1 GB** or **multiples of 5 GB** when provisioning.
44
45Wire apps with Blueprint `fromDatabase` using `property: connectionString` (or `host`, `port`, `user`, `password`, `database` individually). See **render-blueprints**.
46
47### Multiple logical databases
48
49You can run `CREATE DATABASE new_db;` in `psql` on the same instance. **Host, port, and credentials stay the same**; only the **database name in the URL path** changes (e.g. `.../myapp` vs `.../new_db`).
50
51## Storage Management
52
53- **Autoscaling**: When disk use reaches roughly **~90%**, Render can grow storage by about **~50%**, rounded up to the **next 5 GB multiple**, up to **16 TB** max.
54- **Cannot shrink** disk after an increase.
55- **Cooldown**: After a storage increase, you **cannot increase again for 12 hours**.
56- **Over limit / unhealthy**: If disk is over the configured limit, the database can become **unhealthy**; Render may **suspend** it until resolved.
57
58Monitor disk and plan exports or cleanup before you hit hard limits. Backup and restore options: `references/backup-and-recovery.md`.
59
60## Connection Limits
61
62Maximum connections depend on **instance RAM** (current-generation plans):
63
64| RAM | Max connections (typical) |
65|-----|---------------------------|
66| Under 8 GB | 100 |
67| 8 GB | 200 |
68| 16 GB | 400 |
69| 32 GB and above | 500 |
70
71**Legacy** database plans may have **lower** limits; confirm in the Dashboard or API for the specific plan.
72
73Render provides integrated **PgBouncer** connection pooling for paid Postgres instances. Enable it with `connectionPool: pgbouncer` in a Blueprint, then connect clients with the database's `connectionPoolString`. Keep application pool sizes aligned with the database connection limit; clients that require session-level state or dedicated long-lived connections must use the direct connection string. Enabling the managed pool restarts the database and causes a few minutes of unavailability. More detail: `references/connection-guide.md` and `references/performance-tuning.md`.
74
75## High Availability
76
77**High availability (HA)** is available when:
78
79- Database uses a **Pro** or **Accelerated** instance type, **and**
80- **PostgreSQL 13+**
81
82**Instance type changes** cause **brief downtime**. With HA, downtime is typically **less** than **without HA** (often on the order of **minutes** without HA—exact duration depends on plan and operation).
83
84**One-way migration off legacy types**: After moving to current-generation instance types, you **cannot** move back to **legacy** instance types.
85
86## Read Replicas
87
88- Up to **5 read replicas** per database.
89- In Blueprints, declare replicas under **`readReplicas`** as a **list of names**.
90- **CAUTION — declarative sync**:
91 - An **empty** `readReplicas` list can **destroy all** existing replicas.
92 - **Name mismatches** between the Blueprint and live replicas can **create** new replicas and **remove** replicas whose names are no longer listed.
93
94Always treat `readReplicas` as **authoritative** desired state, not additive-only.
95
96## Useful MCP Commands
97
98Use the Render MCP tools (names may vary slightly by integration; align with your server’s tool list):
99
100| Goal | Tool / pattern |
101|------|----------------|
102| List databases | `list_postgres_instances` |
103| Instance details | `get_postgres` with `postgresId` |
104| Read-only SQL | `query_render_postgres` with `postgresId` and `sql` |
105| Connection load | `get_metrics` with `resourceId` (Postgres ID) and `metricTypes: ["active_connections"]` |
106
107`query_render_postgres` runs in a **read-only** transaction and opens a **new connection per query**—do not use it as a substitute for app pooling.
108
109Shorthand (same tools): `list_postgres_instances()`, `get_postgres(postgresId)`, `query_render_postgres(postgresId, sql)`, `get_metrics(resourceId, metricTypes: ["active_connections"])`.
110
111## Deleting and Data Safety
112
113- **Backups and snapshots are not retained** after you **delete** the database. **Export first** (`pg_dump`, Dashboard restore workflow from existing backups, etc.).
114- Before destructive actions, confirm retention and recovery paths in `references/backup-and-recovery.md`.
115
116## References
117
118| Document | Contents |
119|----------|----------|
120| `references/connection-guide.md` | Internal vs external URLs, SSL, allow list, Blueprint wiring, pooling, multi-database URLs, troubleshooting |
121| `references/backup-and-recovery.md` | Snapshots, PITR, `pg_dump` / `pg_restore`, restore flows, deletion, cross-region |
122| `references/performance-tuning.md` | `pg_stat_statements`, indexes, bloat, `EXPLAIN ANALYZE`, metrics, scaling |
123
124## Related Skills
125
126- **render-deploy** — End-to-end deploy, services, and MCP/Dashboard flows
127- **render-blueprints** — `databases`, `fromDatabase`, `readReplicas`, immutable fields
128- **render-networking** — Private services, regions, and how traffic routes between resources
129- **render-env-vars** — Storing `DATABASE_URL` and secret wiring patterns