← Все гайды

Генератор SQL из DBML: PostgreSQL, MySQL, SQL Server, Oracle

· 2 мин чтения

DBML

Как получить SQL-скрипт CREATE TABLE из модели DBML для PostgreSQL, MySQL, SQL Server или Oracle: перечисления, ключи, индексы, комментарии и связи многие-ко-многим.

DBML — компактный язык описания схемы БД: таблицы, колонки, связи. Модель удобно проектировать и обсуждать в DBML, а SQL для нужной СУБД получать автоматически.

Как получить SQL

  1. Откройте песочницу DBML и опишите схему (или возьмите пример — он уже открыт).
  2. Выберите Файл → Скачать → SQL: PostgreSQL (или MySQL, SQL Server, Oracle).
  3. Скачается файл .sql с DDL для выбранной СУБД.
Меню скачивания SQL для разных СУБД в редакторе DBML
Экспорт в SQL: выберите СУБД в меню «Файл»

Что генерируется

Enum status { new
  paid }
Table users {
  id int [pk, increment]
  email varchar(255) [unique, not null, note: 'Почта']
}
Table orders {
  id int [pk]
  user_id int [ref: > users.id]
  status status [default: 'new']
  indexes { (user_id, status) }
}
  • PostgreSQL: перечисление — CREATE TYPE … AS ENUM, автоинкремент — GENERATED BY DEFAULT AS IDENTITY, заметки — COMMENT ON, внешние ключи — ALTER TABLE … ADD FOREIGN KEY в конце скрипта.
  • MySQL: перечисление — ENUM(…) прямо в колонке, AUTO_INCREMENT, комментарии — COMMENT.
  • SQL Server: IDENTITY(1, 1), перечисление — ограничение CHECK (… IN (…)), пакеты разделены GO.
  • Индексы — CREATE INDEX, составные — по списку колонок.
  • Связь многие-ко-многим (Ref: orders.id <> tags.id) — промежуточная таблица orders_tags с составным ключом и двумя внешними ключами.

Если экспорт недоступен

При ошибке в коде скачивание сообщит: «Экспорт невозможен: исправьте ошибки в коде». Ошибки DBML подсвечиваются в строках, на диаграмме остаётся последняя корректная версия.

Что ещё

Вопросы и ответы

Можно ли получить скрипт изменений (ALTER) между двумя версиями модели? Нет, экспорт создаёт полный скрипт создания схемы. Миграции пишите инструментом миграций (Flyway, Liquibase); сравнить версии модели поможет история версий артефакта.

Как получить SQL для схемы, отличной от public? Укажите схему в имени таблицы: Table billing.invoices — она попадёт в DDL.

Поддерживается ли SQLite или ClickHouse? Экспорт — для PostgreSQL, MySQL, SQL Server и Oracle. Скрипт PostgreSQL или MySQL обычно легко адаптировать для близких СУБД.

Куда девается расположение таблиц? В SQL оно не нужно; оно хранится вместе с документом DBML в аккаунте.