Средство форматирования строк SQL

Кто-нибудь знает программу, утилиту или какую-нибудь программную библиотеку, предпочтительно для Linux, которая берет неформатированную строку SQL и красиво ее печатает?

Например, я хотел бы следующее

select * from users where name = 'Paul'

изменить на что-то вроде этого

select * 
from users
where
   name = 'Paul'

Точное форматирование не имеет значения. Мне просто нужно что-то, чтобы взять большую строку SQL и разбить ее на что-то более читаемое.


person Paul D. Eden    schedule 24.12.2008    source источник


Ответы (2)


Проверьте sqlparse. Это модуль Python, который устанавливает команду sqlformat. Использование простое, например:

sqlformat --reindent --keywords upper --identifiers lower my_file.sql

Я попробовал вышеупомянутые альтернативы CLI, но:

  • sqlinform отсутствует, потому что мне нужно приложение CLI с открытым исходным кодом.
  • fsqlf имеет лишь несколько функций (например, отсутствует create view).

Благодаря sqlformat я даже узнал, что "REF" является зарезервированным ключевое слово в SQL:2011 и SQL:2008.

person felixhummel    schedule 20.11.2014
comment
Это полностью испортило форматирование (отступов), которое я хотел, независимо от предоставленных аргументов. - person Shadetheartist; 23.08.2017
comment
Такой же. Даже с одним ключом -r, кстати, только после предложения ORDER BY, он начал увеличивать отступ почти на 40 символов для каждой новой предоставленной строки поля. - person Pysis; 12.04.2018
comment
Этот инструмент автоматически устанавливается Apache Superset. И я рассматриваю это как некую форму поддержки со стороны Superset. - person Lei Zhao; 28.05.2018
comment
Кажется, он не поддерживает канал | для чтения данных из STDIN. - person cprn; 11.10.2018
comment
Просто используйте > для перенаправления вывода в файл. - person Paradox; 11.11.2018
comment
@cprn Вы можете в версии 0.1.2 --- Форматировать ФАЙЛ в соответствии с ОПЦИЯМИ. Использовать - как ФАЙЛ для чтения со стандартного ввода. - person iNulty; 04.10.2019
comment
[email protected] только каким-то образом получает Killed при попытке запустить его в моем файле sql. - person k0pernikus; 06.08.2020
comment
Я надеюсь, что у вас не более нескольких записей, так как я перестал ждать вывода через несколько минут. - person wilsotc; 05.03.2021
comment
Если вы используете программы sqlformat и установленный npm sql-formatter-cli последовательно в таком порядке, вывод в формате SQL будет изысканным. - person fernal73; 12.05.2021

fsqlf (http://sourceforge.net/projects/fsqlf/) — это программа с командной строкой или графическим интерфейсом. , с открытым исходным кодом, для форматирования SQL. Он поддерживает наличие файла formatting.conf, что дает вам большую гибкость в том, как выглядит конечный продукт.

Примеры:

☺  [wwalker@speedy:~] 
$ echo "select f1, f2, fname, lName from tblName where f1 = true and fname is not null order by lName asc" | fsqlf 

SELECT
  f1
, f2
, fname
, lName
FROM tblName
WHERE f1=true
AND fname is not null
ORDER BY lName asc
☺  [wwalker@speedy:~] 
$ vim formatting.conf # 2 character change
☺  [wwalker@speedy:~] 
$ echo "select f1, f2, fname, lName from tblName where f1 = true and fname is not null order by lName asc" | fsqlf 

SELECT
 f1 ,
 f2 ,
 fname ,
 lName
FROM tblName
WHERE f1=true
AND fname is not null
ORDER BY lName asc
☺  [wwalker@speedy:~] 
$ vim formatting.conf # 1 character change
☺  [wwalker@speedy:~] 
$ echo "select f1, f2, fname, lName from tblName where f1 = true and fname is not null order by lName asc" | fsqlf 

SELECT
 f1 , f2 , fname , lName
FROM tblName
WHERE f1=true
AND fname is not null
ORDER BY lName asc
☺  [wwalker@speedy:~] 
$ 
person Wayne Walker    schedule 19.08.2013
comment
Это лучший ответ! Потому что вы можете форматировать SQL-запросы на своем собственном компьютере с помощью инструмента с открытым исходным кодом без необходимости использования стороннего веб-сайта или проприетарного инструмента! С теневым хранением данных и политиками конфиденциальности! - person Alex Bitek; 24.07.2014
comment
Любой PPA для простой установки в Ubuntu? - person cprn; 11.10.2018