# Managed Postgres

Управляемая база данных PostgreSQL, которую можно создать одной командой и подключить к сервисам по ссылке.

<span id="provision" />

## Создание

```bash
lizard add postgres
```

Первое дополнение Postgres получает имя `postgres`, поэтому `${{postgres.DATABASE_URL}}` работает сразу.

<span id="environment-variables" />

## Переменные окружения

Дополнение предоставляет стандартный набор переменных подключения:

| Переменная | Описание |
|----------|-------------|
| `DATABASE_URL` | Полная строка подключения (`postgres://…`) |
| `PGHOST` | Хост |
| `PGPORT` | Порт |
| `PGUSER` | Пользователь |
| `PGPASSWORD` | Пароль |
| `PGDATABASE` | Имя базы данных |
| `POSTGRES_USER` | Алиас пользователя |
| `POSTGRES_DB` | Алиас базы данных |
| `POSTGRES_PASSWORD` | Алиас пароля |

<span id="connect-a-service" />

## Подключение сервиса

Укажите ссылку на строку подключения в сервисе-потребителе и выполните повторное развёртывание:

```bash
lizard secrets set DATABASE_URL='${{postgres.DATABASE_URL}}' --service api
lizard redeploy --service api
```

Ссылка вычисляется при развёртывании и автоматически обновляется при изменении учётных данных дополнения — каждый сервис-потребитель получает новое значение при следующем развёртывании.

Проверьте подключение, не выводя строку подключения:

```bash
lizard run --service api -- sh -c 'psql "$DATABASE_URL" -c "SELECT 1"'
```

<span id="run-migrations-on-deploy" />

## Запуск миграций при развёртывании

Используйте команду перед развёртыванием для запуска миграций. Сделайте миграции безопасными для повторного запуска и совместимыми как со старой, так и с новой версией приложения:

```bash
lizard service set api --set preDeployCommand="npm run migrate"
lizard redeploy --service api
```

Для приложения Django используется команда `python manage.py migrate`; в разделе [Хостинг Python-приложений](https://lizard.build/blog/python-app-hosting#deploying-django) приведены её аналоги для Flask и FastAPI.

<span id="browse-and-query-data" />

## Просмотр данных и выполнение запросов

Откройте **редактор Postgres** в панели управления (`lizard open`), чтобы выполнять SQL-запросы и просматривать таблицы напрямую. Для разовых локальных задач выполните команду, используя внедрённое в сервис окружение:

```bash
lizard run --service api -- sh -c 'exec psql "$DATABASE_URL"'
```

<span id="grow-storage" />

## Увеличение объёма хранилища

Объём хранилища данных можно только увеличивать:

```bash
lizard scale --service postgres --storage 8192
```

<span id="multiple-databases" />

## Несколько баз данных

При добавлении второго экземпляра Postgres для него генерируется имя, например `postgres-autumn-bear`. Укажите ссылку на него явно:

```bash
lizard add postgres
lizard secrets set ANALYTICS_URL='${{postgres-autumn-bear.DATABASE_URL}}' --service api
```

<span id="see-also" />

## См. также

- [Управляемые дополнения](https://lizard.build/ru/docs/addons) — имена, ссылки и инструменты просмотра в панели управления.
- [Межсервисные ссылки](https://lizard.build/ru/docs/variables/references) — синтаксис ссылок и порядок их вычисления.

Сведения о планировании резервного копирования и восстановления см. в разделе [хранилище и восстановление](https://lizard.build/ru/docs/platform/storage-and-recovery). При локальном использовании `lizard run` требуется `psql` и доступная точка подключения к базе данных; этот процесс не выполняется внутри развёрнутого сервиса.
