Managed Postgres

Команда lizard add postgres добавляет в проект Lizard (lizard.build) базу PostgreSQL под управлением Managed Postgres. Новые базы по умолчанию работают на PostgreSQL 18. Lizard сохраняет строку подключения в DATABASE_URL, а её части записывает в PGHOST, PGPORT, PGUSER, PGPASSWORD и PGDATABASE; ваши сервисы читают их через ссылку вида ${{postgres.DATABASE_PRIVATE_URL}}. Вы платите за CPU, память и хранилище базы по тем же тарифам, что и для приложений, а в панели управления для неё есть SQL-редактор. Обзор и цены смотрите на странице Managed Postgres.

Создание

lizard add postgres

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

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

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

ПеременнаяОписание
DATABASE_URLПолная строка подключения через публичную точку доступа (postgresql://…)
DATABASE_PRIVATE_URLСтрока подключения через приватную сеть проекта (<name>.lizard.internal:5432)
PGHOSTХост
PGPORTПорт
PGUSERПользователь
PGPASSWORDПароль
PGDATABASEИмя базы данных
POSTGRES_USERАлиас пользователя
POSTGRES_DBАлиас базы данных
POSTGRES_PASSWORDАлиас пароля

Строка подключения к Postgres

У каждой базы две строки подключения. Обе используют пользователя postgres и базу postgres:

ПеременнаяОткуда подключатьсяФормат
DATABASE_PRIVATE_URLСервисы в том же проектеpostgresql://postgres:<password>@<name>.lizard.internal:5432/postgres
DATABASE_URLВаша машина, CI или сервис в другом проектеpostgresql://postgres:<password>@<host>:<port>/postgres

Вместо <name> подставьте имя базы в проекте; у первой базы это postgres. Публичные хост и порт Lizard назначает при создании базы, поэтому берите их из DATABASE_URL, PGHOST и PGPORT, а не вводите вручную. Приватный адрес работает только внутри проекта; см. приватную сеть.

Большинство драйверов принимают строку как есть:

// Node.js with pg
import pg from 'pg';
const pool = new pg.Pool({ connectionString: process.env.DATABASE_URL });
# Python with psycopg
import os, psycopg
conn = psycopg.connect(os.environ["DATABASE_URL"])

psql и другие инструменты libpq читают переменные PG*, поэтому подключаются без аргументов.

Как посмотреть строку подключения?

  • Панель управления: откройте базу в проекте. На вкладке Overview показаны DATABASE_URL и приватный URL с кнопками копирования. На вкладке Secrets перечислены все переменные подключения и ссылка ${{…}}, которую можно вставить в сервис.
  • CLI: lizard run --service postgres -- printenv DATABASE_URL выводит публичную строку. В ней есть пароль, поэтому не вставляйте её в логи и чаты.

Строка подключения содержит учётные данные. Подключайте к ней сервисы через ссылку, а не копируйте её в секрет: так сервисы получат актуальное значение при каждом развёртывании.

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

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

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

Ссылка вычисляется при развёртывании, поэтому каждый сервис получает актуальные значения дополнения при следующем развёртывании. Для клиентов за пределами проекта используйте DATABASE_URL. Кроме того, каждый сервис в проекте получает публичный DATABASE_URL дополнения с самым низким приоритетом; явная ссылка переопределяет его.

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

lizard run --service postgres -- sh -c 'psql "$DATABASE_URL" -c "SELECT 1"'

lizard run --service postgres выполняет команду на вашем компьютере с публичными значениями подключения базы, поэтому локально должен быть установлен psql. lizard run --service api передаст ссылки ${{…}} как буквальный текст; см. lizard run.

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

Используйте команду перед развёртыванием для запуска миграций. Она выполняется только если задана также команда запуска, в виде sh -c "<pre> && exec <start>" при старте каждого контейнера: каждой реплики, каждого перезапуска. Сделайте миграции безопасными для многократного и одновременного запуска и совместимыми как со старой, так и с новой версией приложения:

lizard service set api --set preDeployCommand="npm run migrate" --set startCommand="npm start"
lizard redeploy --service api

Для приложения Django используется команда python manage.py migrate; см. руководство по Django и Хостинг Python-приложений. Руководства по Umami и Flowise показывают готовые приложения на Managed Postgres.

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

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

lizard run --service postgres -- sh -c 'exec psql "$DATABASE_URL"'

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

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

lizard scale --service postgres --storage 8192

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

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

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

Резервные копии и восстановление

Не рассчитывайте на резервное копирование по расписанию или восстановление на момент времени. Перед рискованной миграцией сами выгрузите базу и проверьте восстановление в отдельной базе. Например, если локально установлен pg_dump 18 или новее:

lizard run --service postgres -- sh -c 'pg_dump "$DATABASE_URL" > backup.sql'

План восстановления см. в разделе хранилище и восстановление.

См. также

Обновлено