Перейти к содержанию

Сравнение схем SQL

Сравнивайте две схемы CREATE TABLE и получайте миграцию ALTER TABLE между ними.

Входные данные
Целевая схема (CREATE TABLE)
Выходные данные

Сравнение схем SQL

Вставьте текущую схему слева и желаемую схему справа — инструмент создаст миграцию между ними. Он сравнивает CREATE TABLE выражения таблица за таблицей и колонка за колонкой, затем генерирует CREATE TABLE, DROP TABLE, ADD COLUMN, DROP COLUMN и ALTER COLUMN выражения, необходимые для преобразования первой схемы во вторую — полезно для проверки изменения схемы, написания файла миграции вручную или проверки того, что сделал инструмент генерации схемы.

Выберите базу данных из опции Database — PostgreSQL, MySQL или SQLite — так как каждая по-разному пишет изменения колонок: PostgreSQL использует ALTER COLUMN ... TYPE и SET/DROP NOT NULL, MySQL объединяет тип и обязательность в одно выражение MODIFY COLUMN, а SQLite вообще не поддерживает ALTER COLUMN, поэтому такие случаи отмечаются как требующие перестроения таблицы. Включите изменения индексов, чтобы также сравнивать CREATE INDEX выражения, обертните выход в транзакцию и включите опцию отката для второй, обратной миграции, добавленной ниже первой.

Удаление таблицы или колонки, сужение типа или добавление NOT NULL может привести к потере данных или конфликту с существующими строками. При включении "Предупреждать о потере данных" каждый такой шаг отмечается в выводе, чтобы было легко заметить перед запуском против реальной базы данных. Таблицы, которые ссылаются друг на друга через внешний ключ, создаются и удаляются в порядке зависимостей, поэтому скрипт не сломается из-за нужной ему таблицы.

Всё работает локально в вашем браузере — ваши схемы никуда не загружаются, поэтому безопасно вставлять реальные определения таблиц из приватной базы данных. Скопируйте миграцию, загрузите её как .txt файл или отправьте выход обратно во вход для дальнейшей доработки.

FAQ

Какие диалекты SQL поддерживаются?
PostgreSQL, MySQL и SQLite. Выберите один из опции Database — каждый пишет ALTER COLUMN, индексы и синтаксис кавычек по-разному.
Может ли он обнаружить изменения, которые могут привести к потере данных?
Да. Удаленные таблицы, удаленные колонки, колонки сужённые до меньшего типа и колонки, сделанные NOT NULL, все отмечаются предупреждением, когда включена опция "Предупреждать о потере данных".
Обрабатывает ли он зависимости внешних ключей?
Да. Когда одна таблица ссылается на другую, CREATE TABLE выражения упорядочиваются так, чтобы указанная таблица шла первой, а DROP TABLE выражения упорядочиваются так, чтобы таблицы, на которые ссылаются, удалялись перед таблицами, от которых они зависят.
Какой синтаксис SQL он читает?
Стандартные CREATE TABLE выражения с типизированными колонками, NOT NULL, PRIMARY KEY и REFERENCES, плюс отдельные CREATE INDEX выражения. Выражения, которые инструмент не распознает (вставки, другие DDL), пропускаются, а не отклоняются.
Загружаются ли мои схемы куда-то?
Нет. Сравнение схем и генерация миграции работают полностью в вашем браузере — ничего из того, что вы вставляете здесь, не отправляется на сервер.