DinD HostingПосібник
ENУК
РОЗДІЛ 08

Бази даних

База даних — це контейнер у демоні баз даних зі згенерованими обліковими даними. Ваш застосунок звертається до неї приватною мережею платформи; ви — через SQL-консоль.

Створення бази даних#

Відкрийте вкладку «Бази даних» проєкту, натисніть «+ Додати базу даних», виберіть назву та СУБД — postgres або mysql — і натисніть «Створити».

hosting.example.com/projects/7
Бази даних
Вкладка «Бази даних». (1) один рядок на кожну базу даних із її СУБД та образом, (2) адреса і користувач облікових даних, (3) кнопки SQL-консолі та видалення.

Пароль показується один раз — у вікні «Базу даних створено». Скопіюйте його одразу: платформа зберігає його в зашифрованому вигляді й більше не показує (застосунок отримує його як змінну).

bash
curl -fsS -X POST "$BASE/api/v1/projects/$PID/databases" \
  -H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' \
  -d '{"engine":"postgres","name":"main"}'
create_database(project=7, name="main", engine="postgres")

Відповідь містить облікові дані та image, у якому працює база даних. Пароль є лише в цій відповіді.

PostgreSQL MySQL
Образ для нової бази даних postgres:17-alpine mysql:8.4
Перевірка стану pg_isready mysqladmin ping
Формат дампа pg_dump -Fc (.pgdump) mysqldump --single-transaction --routines --triggers (.sql.gz)

Назви: спочатку літера, далі малі літери, цифри та дефіси. Консоль приймає 2–21 символ (API дозволяє підкреслення і до 40 символів).

База даних зберігає образ, з якого її створено

Кожна база даних зберігає свій образ назавжди. База Postgres 16 лишається на 16 — каталог даних версії 16 не запуститься під 17 — зокрема й коли її перестворюють для відновлення. Перехід на новішу основну версію — це дамп і відновлення в нову базу даних. Образ показується в консолі поруч зі СУБД.

Де живе база даних#

Бази даних працюють у демоні баз даних, а не у вашому демоні застосунків. Типово це єдиний спільний демон db; адміністратор може виділити користувачеві окремий демон db-<alias>. У будь-якому разі кожна база даних — це власний контейнер із власним томом (dbdata-<slug>-<name>), портом (20000–29999) та обліковими даними, доступний лише у внутрішній мережі платформи — публічного порту бази даних немає.

Підключення застосунку#

Вкажіть базу даних у platform.yaml, і платформа додасть п'ять змінних, у яких ім'я записане великими літерами:

platform.yaml
databases: [main]
Змінна Приклад
DB_MAIN_HOST 172.28.0.10
DB_MAIN_PORT 20000
DB_MAIN_USER згенероване
DB_MAIN_PASSWORD згенероване, у консолі ніколи не показується
DB_MAIN_NAME назва бази даних
js
import pg from "pg";
const pool = new pg.Pool({
  host: process.env.DB_MAIN_HOST, port: +process.env.DB_MAIN_PORT,
  user: process.env.DB_MAIN_USER, password: process.env.DB_MAIN_PASSWORD,
  database: process.env.DB_MAIN_NAME,
});
python
import os, psycopg

conn = psycopg.connect(
    host=os.environ["DB_MAIN_HOST"], port=os.environ["DB_MAIN_PORT"],
    user=os.environ["DB_MAIN_USER"], password=os.environ["DB_MAIN_PASSWORD"],
    dbname=os.environ["DB_MAIN_NAME"],
)
php
$dsn = sprintf("pgsql:host=%s;port=%s;dbname=%s",
  getenv("DB_MAIN_HOST"), getenv("DB_MAIN_PORT"), getenv("DB_MAIN_NAME"));
$pdo = new PDO($dsn, getenv("DB_MAIN_USER"), getenv("DB_MAIN_PASSWORD"));

Порядок має значення

Змінні додаються лише для баз даних, які існують на момент розгортання чи перестворення застосунку. Спершу створіть базу даних, а потім розгорніть застосунок — або після цього натисніть «Перестворити» на вкладці «Застосунок». Віддавайте перевагу назвам баз даних без дефісів: назва на кшталт my-db дає DB_MY-DB_HOST, яку оболонка не може прочитати.

SQL-консоль#

Натисніть «SQL-консоль» у рядку бази даних. Вона виконує один оператор від імені користувача бази даних проєкту й показує результат у вигляді таблиці.

hosting.example.com/projects/7
SQL-консоль — main
SQL-консоль: текстове поле, «Виконати» та «Створити дамп». Результат показує кількість рядків і витрачений час.

Обмеження, однакові в консолі та в MCP-інструменті run_query:

Обмеження Значення
Операторів за виклик один
Тайм-аут типово 30 с (statement_timeout / max_execution_time)
Розмір результату обрізається на 1 000 рядків або 1 МіБ і позначається як обрізаний
Аудит кожне виконання записується в журнал запитів із користувачем, SQL, статусом, кількістю рядків і тривалістю

Для роботи зі схемою користуйтеся міграціями

Консоль призначена для перегляду й швидких виправлень. Запускайте зміни схеми з міграційного інструмента вашого застосунку під час старту, щоб відновлена чи нова база даних завжди була узгодженою.

Дампи#

«Створити дамп» (або dump_database) записує стиснутий логічний дамп у MinIO і виводить його в списку «Останні дампи» з розміром і sha256. Дамп виконується в тимчасовому контейнері, створеному з власного образу бази даних, тому версія інструмента завжди збігається з версією сервера. Дампи підпорядковуються політиці зберігання резервних копій — див. Резервні копії та відновлення.

Видалення бази даних#

«Видалити» прибирає контейнер і його том. Дампи, уже збережені в MinIO, — єдиний шлях назад, тому спершу створіть дамп.