Форматирование и проверка SQL
Приводите SQL в читаемый вид или сжимайте его и проверяйте синтаксис с точным указанием строки и столбца ошибки — для 20 диалектов, прямо в браузере.
Всё работает в вашем браузере — SQL никогда не загружается на сервер.
Параметры
Перетащите сюда файл .sql или .txt, вставьте текст или загрузите пример. Ctrl+Enter — выполнить.
Проверка синтаксиса
«Корректен» означает, что синтаксис соответствует этой грамматике. У проверки нет схемы базы данных, поэтому она не знает, существуют ли таблицы и столбцы и выполнится ли запрос. Специфичный для СУБД или очень новый синтаксис может быть отклонён, хотя ваша база данных его принимает.
Форматирование, сжатие и проверка SQL в браузере
Читаемый SQL проще проверять, отлаживать и сравнивать. Инструмент переписывает запрос с единообразными отступами, переносами строк и регистром ключевых слов и учитывает особенности примерно двадцати диалектов, включая MySQL, PostgreSQL, SQL Server (T-SQL), SQLite, BigQuery, Snowflake, Redshift, Oracle PL/SQL, Hive, Spark, Trino и DB2. Выберите диалект, отступ в два или четыре пробела либо табуляцию, решите, писать ли ключевые слова, типы данных и имена функций в верхнем или нижнем регистре или оставить как есть, и перенесите запятые в начало строк, если так принято в вашей команде.
Проверка синтаксиса — вторая половина инструмента. Вставьте скрипт, и каждый оператор будет проверен отдельно, так что сразу видно, какие проходят, а какие нет. Для ошибки показываются строка и столбец, проблемный токен, несколько строк контекста и, по возможности, подсказка: опечатка в ключевом слове, лишняя запятая или незакрытая скобка. При разбиении скрипта учитываются строки, комментарии, обратные кавычки, квадратные скобки и тела в долларовых кавычках PostgreSQL, поэтому точка с запятой внутри литерала не разрежет оператор пополам.
Сжатие — обратная операция: оно убирает лишние пробелы и при желании комментарии, превращая запрос в компактную одну строку для логов, конфигурационных файлов или вставки в код. Инструмент работает с токенами, а не с регулярными выражениями, поэтому текст внутри строк и имён в кавычках остаётся ровно таким, как был.
Помните об ограничениях. Зелёная отметка доказывает лишь, что синтаксис соответствует выбранной грамматике, но не что ваши таблицы существуют и что запрос быстрый или правильный. Некоторые диалекты, процедурные блоки и самые новые возможности поддерживаются лишь частично, а для ряда диалектов отдельной проверки нет — тогда можно самому выбрать ближайшую грамматику. Всё происходит локально, поэтому рабочие запросы можно вставлять без опасений, а большой файл просто приостанавливает автоматический предпросмотр до нажатия кнопки.
Часто задаваемые вопросы
Означает ли «корректен», что запрос выполнится?
Нет. Проверяется только синтаксис. У инструмента нет доступа к вашей базе данных, поэтому он не знает, существуют ли таблица или столбец, совместимы ли типы и есть ли у вас права. Кроме того, он использует собственную грамматику, поэтому совсем новый или специфичный для конкретной СУБД синтаксис может быть отклонён, хотя ваша база его принимает. Зелёный результат читайте как «SQL составлен правильно», красный — как «посмотрите на это место».
Загружается ли мой SQL куда-нибудь?
Нет. Форматирование, сжатие и проверка синтаксиса выполняются в вашем браузере, в фоновом обработчике. На сервер ничего не отправляется. Необязательный черновик и ваши настройки хранятся только в локальном хранилище этого браузера.
Почему форматтер срабатывает, а проверка сообщает об ошибке?
Это два разных механизма. Форматтеру достаточно распознать токены и предложения, поэтому он снисходителен. Проверка использует полную грамматику выбранного диалекта и строже. Если их выводы расходятся, вы увидите предупреждение: результат всё равно показывается, но отмеченную строку стоит проверить.
Меняет ли сжатие смысл запроса?
Удаляются только пробелы и комментарии. Строки, идентификаторы в кавычках, блоки в долларовых кавычках и подсказки оптимизатора копируются символ в символ, а токены, которые стояли вплотную, остаются вплотную. На всякий случай не сжимайте скрипты, зависящие от переводов строк, например блоки MySQL DELIMITER.