Форматирование SQL-запросов

Форматирование SQL: переносы по клаузам, отступы подзапросов и JOIN, верхний регистр ключевых слов. Литералы и комментарии не трогаются.

Режим
Отступ
Ключевые слова

Что форматтер делает и чего не делает

Клаузы (SELECT, FROM, WHERE, JOIN) встают на свои строки, тело клаузы — с отступом, подзапрос получает собственный уровень. В регистр поднимаются только служебные слова: имена функций и колонок остаются как в исходнике. Строковые литералы ('select') и комментарии переносятся как есть — внутри них форматтер не смотрит на ключевые слова. Диалект — общий; комментарий -- всегда завершает строку, поэтому и в режиме «в одну строку» он даёт перенос.

Последние запросы

В истории — сводка со счётчиками и режимом: сам запрос не сохраняется.

Готовые примеры

Найдено: 4 из 4

Что это и как пользоваться

Форматтер раскладывает запрос по клаузам: SELECT, FROM, WHERE, JOIN, GROUP BY, ORDER BY — каждая с новой строки, подзапросы с отступом. Режимов два: pretty с переносами и compact, который сжимает запрос без потери читаемости.

Переносы ставятся перед клаузами, а не после: SELECT и FROM начинают строку, поэтому запрос читается сверху вниз по смыслу, а не по кускам.

Отступ настраивается — 2 пробела, 4 или табуляция, — а регистр ключевых слов переключается между верхним и нижним. Это важно не само по себе, а потому что единый стиль в репозитории убирает шум в diff.

Строковые литералы и комментарии не трогаются: select внутри кавычек остаётся данными, а не ключевым словом, и регистр в нём не меняется.

Форматирование чисто текстовое: запрос не исполняется и не проверяется против схемы, поэтому синтаксическая ошибка останется в выводе как есть.

Когда пригодится

  • Развернуть однострочный запрос из лога в структуру, по которой видно, что с чем соединяется.
  • Привести запросы в репозитории к одному стилю перед ревью.
  • Найти потерянную скобку: с отступами вложенность подзапросов становится видимой.
  • Сжать запрос в одну-две строки для вставки в конфиг или в лог, не теряя пробелов вокруг операторов.
  • Подготовить запрос для документации или тикета в читаемом виде.
  • Прочитать сгенерированный ORM запрос и понять, в каком порядке идут JOIN и подзапросы.

Чего инструмент не делает

  • Диалекты не различаются: специфичный для PostgreSQL или Oracle синтаксис может отформатироваться неидеально.
  • Запрос не переписывается и не оптимизируется: страница не подскажет, что мешает использовать индекс.
  • Ошибки не исправляются: недостающее ключевое слово или лишняя запятая останутся в выводе.
  • Регистр внутри строковых литералов сохраняется как есть: «select» в кавычках не станет «SELECT».
  • Ввод ограничен 2 млн знаков; дампы и миграции целиком лучше форматировать частями.
  • Диалектные расширения вроде RETURNING или LATERAL переносятся как обычные слова и могут встать не по стилю.

Примеры

Вход
                    SELECT a,b FROM t WHERE x=1
                  
Выход
                    SELECT
  a,
  b
FROM
  t
WHERE
  x = 1
                  
Вход
                    вложенный JOIN в режиме pretty
                  
Выход
                    подзапросы и JOIN получают отдельные отступы