Настройка базы данных

REDB требует набор таблиц, последовательностей и функций в вашей базе данных. Выберите удобный способ создания схемы.

Быстрее всего

Шаблон проекта

Готовый проект с моделями, CRUD и древовидными запросами — запускается сразу.

$dotnet new install redb.Templates
$dotnet new redb -n MyApp --db postgres
$cd MyApp && dotnet run

Параметры: --db postgres|mssql   --pro true|false

База данных создаётся автоматически при первом запуске. Просто укажите строку подключения в Program.cs.

A Авто-создание из кода

Самый простой способ. Передайте ensureCreated: true в InitializeAsync, и REDB создаст все необходимые объекты, если они ещё не существуют.

Program.cs
var redb = services.GetRequiredService<IRedbService>();

// Creates schema if tables don't exist, then scans assemblies
await redb.InitializeAsync(ensureCreated: true);

// Or pass assemblies explicitly to register specific models
await redb.InitializeAsync(ensureCreated: true, typeof(Product).Assembly);
Когда использовать: Локальная разработка, прототипирование, небольшие проекты. Приложение само управляет схемой — внешние инструменты не нужны.

Внутри вызывается EnsureDatabaseAsync(), который проверяет наличие таблицы _schemes и запускает полный скрипт инициализации, если её нет.

Явный двухшаговый вариант
// Step 1: Create schema
await redb.EnsureDatabaseAsync();

// Step 2: Register models (assembly is optional — omit to scan all referenced assemblies)
await redb.InitializeAsync();
// or specify assemblies explicitly:
// await redb.InitializeAsync(typeof(Product).Assembly);

B CLI-инструмент

Установите dotnet-инструмент redb.CLI и инициализируйте базу из терминала.

bash
# Install once
dotnet tool install --global redb.CLI

# PostgreSQL
redb init -p postgres -c "Host=localhost;Database=mydb;Username=postgres;Password=pass" -v

# SQL Server
redb init -p mssql -c "Server=localhost;Database=mydb;User Id=sa;Password=pass;TrustServerCertificate=True" -v
Когда использовать: Онбординг команды, staging-среды, когда нужен явный контроль момента применения схемы.

Подробнее см. Справочник CLI — полная документация по командам export и import.

C SQL-скрипт вручную

Экспортируйте полный скрипт инициализации, проверьте его и выполните своим любимым SQL-инструментом. Идеально для сред, где DBA должен одобрить все изменения схемы.

bash
# Export to file
redb schema -p postgres -o redb_schema.sql

# Review
cat redb_schema.sql

# Apply with psql
psql -d mydb -f redb_schema.sql
Или через pipe
redb schema -p postgres | psql -d mydb
redb schema -p mssql | sqlcmd -d mydb

Скрипт также можно получить из кода:

csharp
var sql = redb.GetSchemaScript();
File.WriteAllText("redb_schema.sql", sql);
Когда использовать: Продакшен со строгим управлением изменениями, требования комплаенса, деплой под контролем DBA.

D Docker / CI Pipeline

Запустите инициализацию схемы как шаг контейнера или задачу CI.

Dockerfile (multi-stage)
# Install CLI in build stage
FROM mcr.microsoft.com/dotnet/sdk:9.0 AS tools
RUN dotnet tool install --global redb.CLI
ENV PATH="$PATH:/root/.dotnet/tools"

# Init before app starts
ENTRYPOINT ["sh", "-c", "redb init -p postgres -c \"$REDB_CONN\" && dotnet MyApp.dll"]
GitHub Actions
# .github/workflows/deploy.yml
- name: Init REDB schema
  run: |
    dotnet tool install --global redb.CLI
    redb init -p postgres -c "$REDB_CONNECTION" -v
Когда использовать: Автоматизированные деплои, контейнерная оркестрация, эфемерные окружения.

Примеры Docker Compose

Готовые compose-файлы для запуска базы данных с REDB.

docker-compose.yml — PostgreSQL
version: '3.8'
services:
  pgdb:
    restart: always
    image: postgres:18
    container_name: pgdb
    ports:
      - "5432:5432"
    environment:
      POSTGRES_PASSWORD: your_password
    volumes:
      - pgdata:/var/lib/postgresql/data

volumes:
  pgdata:
Dockerfile — SQL Server с Full-Text Search
FROM mcr.microsoft.com/mssql/server:2025-latest

USER root

# Install FTS package
RUN apt-get update && \
    apt-get install -y curl apt-transport-https gnupg && \
    curl -fsSL https://packages.microsoft.com/keys/microsoft.asc | apt-key add - && \
    curl -fsSL https://packages.microsoft.com/config/ubuntu/22.04/mssql-server-preview.list \
      -o /etc/apt/sources.list.d/mssql-server.list && \
    apt-get update && \
    ACCEPT_EULA=Y apt-get install -y mssql-server-fts && \
    apt-get clean && rm -rf /var/lib/apt/lists/*

USER mssql
docker-compose.yml — SQL Server
version: '3.8'
services:
  msdb:
    restart: always
    build: .  # uses the Dockerfile above
    container_name: msdb
    ports:
      - "1433:1433"
    environment:
      - MSSQL_SA_PASSWORD=YourStr0ngPassword!
      - ACCEPT_EULA=Y
    volumes:
      - mssql-data:/var/opt/mssql/data
      - mssql-log:/var/opt/mssql/log
      - mssql-secrets:/var/opt/mssql/secrets
    healthcheck:
      start_period: 1m
      interval: 1m30s
      timeout: 10s
      retries: 3

volumes:
  mssql-data:
  mssql-log:
  mssql-secrets:

После запуска контейнера инициализируйте схему REDB:

bash
# PostgreSQL
redb init -p postgres -c "Host=localhost;Database=mydb;Username=postgres;Password=your_password" -v

# SQL Server
redb init -p mssql -c "Server=localhost;Database=mydb;User Id=sa;Password=YourStr0ngPassword!;TrustServerCertificate=True" -v

Сравнение методов

Метод Когда Ревью DBA Автоматизация Zero Config
A. Авто-создание Разработка / Прототип
B. CLI Staging / Команда
C. SQL-скрипт Продакшен / Комплаенс
D. Docker / CI Контейнеры / Пайплайны