---
title: Add a Database
url: "/learn/databases/"
canonical_url: https://docs.blossom88.com/learn/databases/
markdown_url: https://docs.blossom88.com/learn/databases.md
summary: Give your App a managed database, with backups, in a few commands
categories:
- learn
- databases
---

# Add a Database

Blossom runs managed PostgreSQL, MySQL, MariaDB and MongoDB, with backups on
from the start. Ask your agent:

> Add a PostgreSQL database for my-app.

Here are the steps it takes, using the App from
[Getting Started](/learn/getting-started/). Keep the same
[profile Location](/learn/getting-started/choose-your-cloud/#use-your-location)
so the database runs alongside your App, on Blossom Cloud or your own cloud.

## Create The Database

    blossom database_instance:init

database_instance.yml:

```yaml
database_instance:
  name: production
  engine: postgres # postgres, mysql, mariadb, or mongodb
  availability: shared # or dedicated, its own Server
  storage_gib: 20 # grows online later, never shrinks
  backup_storage_id: blossom_cloud
  database_name: app_production
  # ...
```

    blossom database_instance:create --data database_instance.yml --follow

| | Shared | Dedicated |
|---|---|---|
| Runs on | Capacity shared with your other data | Its own Server |
| Good for | Getting started, small Apps | Production, with an optional standby |

## Connect It To Your App

In the UI, open your Environment’s **Variables and Links → Manage
connections**. **Connected data** shows what is connected and what is available
in the same Location. Choose **Connect**, check the variable name, and confirm.
You can also start from a Database or Cache page with **Connect to Environment**.
Creating a database first and connecting it later works too.

PostgreSQL creates the initial `app_production` database with the instance.
Find its ID, then link that Database to the Environment:

    blossom database:list --database_instance database_instance-100
    blossom environment_link:init

Edit environment_link.yml to use the Database ID from the list:

```yaml
environment_link:
  environment_id: environment-100 # replace with your environment id
  target_type: Database
  target_id: database-100
  var_name: DATABASE_URL
```

    blossom environment_link:create --data environment_link.yml

Every Service receives `DATABASE_URL` on its next deploy. Configure your
App's PostgreSQL driver to read that variable and run its migrations in the
[Release Phase](/docs/apps/deploy-hooks/).
The Sinatra starter runs without a database; linking PostgreSQL makes it
available for the features you add.

## What You Get

- A running database, reachable from linked Environments over private networking
- `DATABASE_URL` in every Service of the Environment
- Backups from the start, with [restore](/docs/backups/) when you
  need it

Next, [deploy your App](/learn/getting-started/deploy/) to use the
connection.

## Keep Prompting

> Add a feature that saves data to PostgreSQL using DATABASE_URL.

See [Databases](/docs/databases/) and
[Caches](/docs/caches/) for other engines and connection options.
