На сегодняшний день можно скачать версии для OSX и Ubuntu. Пользователи других linux-дистрибутивов могут запустить приложение из исходников. К сожалению, версии для Windows пока нет. Хочется надеяться, что приложение понравится сообществу, и найдутся разработчики, способные помочь в выпуске пакетов под разные платформы: rpm, debian, windows.
Немного информации для разработчиков: SQL Tabs написано на стэке javascript, electron, react? и использует native libpq драйвер для работы с базой. Выпускается под лицензий GPL3.
?
Теперь об основных особенностях SQL Tabs, отличиях от других похожих продуктов и основной мотивации, которая стоит за разработкой.??
??
Начнем с процесса создания соединения, который сделан максимально просто: нужно ввести URL в адресной строке. Так сделано для экономии времени при переключении между серверами, особенно при работе с шардированными базами.
![image](http://shards.io/images/habr_article1/file_browser.png)
Наверное самым большим отличием от подобных приложений будет отсутствие привычного дерева объектов БД в левой боковой панели. Вместо него там расположен навигатор по файловой системе в духе Project Window. Это делает SQL Tabs больше похожим на текстовый редактор а ля Sublime. Как никак, разработка баз данных ничем принципиально не отличается от любой другой разработки: SQL скрипты нужно хранить в файлах, а файлы в git или любой другой scm. При этом, редактируя файл, можно тут же выполнять запросы, переключаясь между разными базами данных на лету.
Тем не менее, навигатор по объектам таки существует, вызвать его можно из меню, выбрав пункт Database Info. Список поддерживаемых объектов пока далеко не полный, это как раз та область, где еще предстоит поработать. Такое решение позволяет получать быстрый доступ к описанию объектов прямо в время написания кода. Например, набрав имя таблицы в редакторе, можно нажать CTRL+I (CMD+I на маке) и увидеть структуру таблицы и наличие индексов, не переключаясь на другое окно.
![image](http://shards.io/images/habr_article1/schema_browser.png)
?Из плюшек еще имеются история выполненных запросов с поиском, светлая и темная темы оформления, автодополнение ключевых слов и имен объектов. Для гиков есть Vim-мод.
Теперь моя любимая фишка — визуализация результата запроса. Смысл в том, чтобы по данным из таблицы построить график, не покидая контекста SQL. Очень полезно при поверхностном анализе данных. Работает это следующим образом.
SQL Tabs может использовать в скриптах дополнительную семантику: блоки SQL команд, которые разделяются при помощи строки комментария, начинающейся с трех дефисов:
--- 1st SQL block
SELECT 1;
SELECT 2;
--- 2nd SQL block
SELECT 3;
SELECT 4;
Такая строка может содержать в себе дополнительно аннотацию, т.е. пояснять каким образом нужно интерпретировать вывод SQL команд текущего блока.? Например, вот такой запрос, возвращающий количество сотрудников по городам: ?
SELECT city, COUNT(*) FROM employees GROUP BY city
city | count
---------|---------
London | 245
Paris | 153
New York | 323
Для визуализации таких данных сам собой напрашивается pie-chart (пусть это и не самый удачный вариант графика). Для того, чтобы построить график в SQL Tabs, добавляем перед запросом аннотацию и нажимаем Execute Block.
--- chart pie
SELECT city, COUNT(*) FROM employees GROUP BY city
![image](http://shards.io/images/habr_article1/pie_chart.png)
Для меня самыми полезными оказались обычные timeseries графики для анализа роста таблиц и распределения данных во времени. Вот синтетический пример такого графика:??
?--- chart area-spline x=1
SELECT d::date, random() FROM generate_series(now()-interval '1 month', now(), interval '1 day') d?
![image](http://shards.io/images/habr_article1/random_timeseries.png)
А вот картинка из реального примера. Размер дневных партиций и их индексов:??
![image](http://shards.io/images/habr_article1/table_index_size.png)
И в завершении немного о планах. SQL Tabs — очень молодой продукт, всего лишь 4 месяца от роду. За это время ритм разработки удавалось держать на уровне примерно двух релизов за месяц. Каждый релиз, как правило, содержал одну или несколько относительно завершенных фич. На сегодняшний момент основная концепция, которая должна быть в первой версии, реализована. Следующие релизы скорее всего будут направлены на доработку и отладку заявленной функциональности.
Если есть какие-то замечания по продукту — обязательно оформите issue в официальном репозитории github.com/sasha-alias/sqltabs. Я уверен, ваши отзывы очень помогут сделать SQL Tabs лучше и в семействе инструментов для Potgresql прибудет.
Комментарии (66)
stalkerg
15.10.2015 14:31+9SQL Tabs написано на стэке javascript, electron, react
Для меня это означает: «закапывайте».olsender
15.10.2015 14:46Я и сам удивляюсь :)
stalkerg
15.10.2015 14:55Сборка самим предполагает полную сборку webkit? :)
olsender
15.10.2015 14:59Достаточно поставить electron-prebuilt из npm
ploop
15.10.2015 15:07Да, если бы он ещё ставился…
npm ERR! Exit status 127 npm ERR! npm ERR! Failed at the electron-prebuilt@0.25.2 install script. npm ERR! This is most likely a problem with the electron-prebuilt package, npm ERR! not with npm itself.
olsender
15.10.2015 15:12+2Стоит всерьез задуматься о x64 :)
ploop
15.10.2015 15:38Да я в курсе, но есть на то причины :)
Ладно, буду ковырять. Так как с Postgresql работаю ежедневно, любые инструменты пригодятся.mIK_LH
15.10.2015 16:21Что-то можете посоветовать кроме pgAdmin?
relclick
15.10.2015 17:52+4Для простых задач типа просмотра данных — www.psequel.com
Для сложных задач — dbeaver.jkiss.org
Есть еще Navicat, но он платный.faiwer
15.10.2015 19:53Для сложных задач — dbeaver.jkiss.org
Поразительно. Как он раньше от меня ускользал. Сколько ни искал под linux клиента, такого найти не мог. В итоге остановился на связке heidiSQL + wine. Но на Postgre она обламалась. А тут нативное решение и с поддержкой ssh-туннелей из коробки (heidi тоже умеет, но под wine-ом мне завести не удалось).ploop
16.10.2015 10:32На самом деле не очень. Конечно, контекстное дополнение радует, переход по связям в результатах запроса и прочие вкусности, но много глюков (банальные перевод строки внутри запроса уже не переваривает), сложно работать с объектами plpgsql (только руками), дерево объектов только делает вид, что обновляется по F5, ну и т.д.
kaichou
15.10.2015 16:45-2> SQL Tabs написано на стэке javascript, electron, react
интересно, что вообще побуждает людей на такое?JC_Piligrim
15.10.2015 19:51+12Люди пишут на том, что уже умеют и знают, вместо того чтобы учить что-нибудь вроде C++, в процессе растерять энтузиазм и в итоге совсем забить.
Если у C++ охренеть какой высокий порог вхождения по современным меркам — разве это проблема в людях, а не в языке? Может мало кто хочет красноглазить, у людей помимо программирования есть ещё семья, увлечения. Вот и экономят на программировании, делая на том, что уже знают. Не вижу проблемы.
P.S. Что-то не видно качественных open source GUI для postgres на «ТРУЪшных» языках. С чего бы это?stalkerg
16.10.2015 16:51Мне кажется но порог вхождения в C++/Qt (и тем более QML/JavaScript) будет не намного выше чем выше указанная связка.
P.S. Что-то не видно качественных open source GUI для postgres на «ТРУЪшных» языках. С чего бы это?
Почти всем хватает psql. GUI хотят те кто приходит в postgres из других баз или платформ (windows). Основные разработчики по сему особо и не заморачиваются. Будет большой спрос — напишут.olsender
16.10.2015 20:08+1Почти всем хватает psql. GUI хотят те кто приходит в postgres из других баз или платформ (windows).
Мне это видится скорее проблемой, чем преимуществом. Мне и самому в 90% случаев хватает psql. Но отсутсвие нормальных тулов отпугивает от Postgresql многих потенциальных пользователей.
Кроме того, psql хватает для сугубо административных задач. Для разработки еще туда-сюда — можно пережить, скрестив его с любим редактором. Но для быстрого анализа данных, отладки сложных запросов и т.п. имхо труба…stalkerg
17.10.2015 13:46Но отсутсвие нормальных тулов отпугивает от Postgresql многих потенциальных пользователей.
С этим я с вами согласен. Выше я скорее говорил, по чему этого сейчас не происходит.
printercu
15.10.2015 14:34+1Для сборки пакетов под все платформы разом можно посмотреть github.com/jordansissel/fpm
Сам не собирал, но вдруг пригодится.
krig
15.10.2015 14:51+1Удобная минималистичная гуя. Но не понял как выбирать из списка автокомплита: например, начинаю печатать имя таблицы в from, он показывает мне варианты, среди них есть нужный, жму вниз — выпадающий список просто исчезает, хотя я ожидаю что будет выделен верхний элемент в списке.
Второй момент — пароль в строке ввода остается открытым, что не очень хорошо, я не хочу показывать свой пароль к базе своим коллегам, я хочу им показывать только запросы и результаты их выполнения.
defuz
15.10.2015 18:27+3Да что же оно все для Postgres страшное такое. :(
olsender
15.10.2015 19:43+1Как получилось, извиняйте :)
А что не страшное для примера?defuz
15.10.2015 21:09На мой вкус Sequel Pro очень хорош, но он не работает с Postgres. Еще неплох Navicat, но он платный. А все, что я пробовал для Postgres выглядит как поделка на скорую руку. И дело даже не в аскетичном наборе возможностей, а именно в неаккуратности интерфейса.
defuz
15.10.2015 21:17Что касается SQL Tabs (я так понимаю, вы имеете прямое отношение к его разработке), то в нем прямо сразу узнается «поделка на бутстрепе». Могу предложить присмотрется по Атому, он построен на том же стеке, но по нему не сразу и скажешь, что там использован html/css/javascipt, а выглядит он как нативное приложение. Slack тоже выглядит неплохо.
olsender
15.10.2015 22:18Это дело поправимое :) Главное, что стэк позволяет сделать какой угодно дизайн… в будущем. SQL Tabs всего лишь четыре месяца и это еще версия 0.x. И да, я автор и единственный разработчик. Так что по дизайну — это на самом деле поделка на бутстрапе, в css лучше не заглядывать — там страх и ужас! Темная тема должна выглядеть немного более причесанной — я ей больше пользуюсь.
scrutari
15.10.2015 19:24-1Интересно, а почему GPL?
olsender
15.10.2015 19:49А почему такой вопрос? ;)
scrutari
17.10.2015 00:07GPL лицензии все-таки весьма запретительные. Поэтому мне интересно, почему люди выбирают их: может быть, они используют компонент, из-за которого другую лицензию не выберешь? может быть, авторы специально хотят, чтобы их кодом никто не воспользовался, не выложив свои наработки в open source? а может, это просто первая пришедшая на ум open source лицензия :)
olsender
17.10.2015 09:55+2Решение выпускаться под GPL вполне взвешенное. Компоненты, которые можно было бы переиспользовать в других проектах, выделены отдельно и лицензируются под MIT лицензией. Сам же SQL Tabs — не библиотека, а конечный продукт. И хотелось бы, чтобы в случае форков он оставался открытым.
bo883
15.10.2015 21:59+1А мне понравилась минималистичная guiконсолька, прикольно. Я только тему не могу сменить. Удачи парни.
Timosha
15.10.2015 23:45всё разбилось о
[8738:1015/234501:INFO:CONSOLE(83)] "Uncaught Error: Module did not self-register.", source: /home/timon/dev/sqltabs/node_modules/libpq/node_modules/bindings/bindings.js (83) [8738:1015/234503:ERROR:channel.cc(299)] RawChannel read error (connection broken)
btd
16.10.2015 10:40Хорошая идея. Сам над тем же работал, но времени не хватало, переключился на другие задачи.
картинкаolsender
16.10.2015 10:54Спасибо за конструктивный отзыв! Редактор взял Ace, т.к. он умеет подсвечивать хранимые процедуры на разных языках и json.
Что вы имеете ввиду под поддержкой встроенных типов?
explain вроде нормально отображается — текстовое дерево, как в psql )btd
16.10.2015 11:05Вот смотрите как можно отображать explain plan (http://explain.depesz.com/s/i7LN), я не говорю, что копируйте один в один, но согласитесь, когда красным явно показано какая часть тормозит, довольно заметно. Я использовал CodeMirror, он вроде бы все тоже самое умеет делать.
Под поддержкой встроенных типов я имею в виду, что н-р если есть возможность редактировать строки после выборки, то если поле timestamp показывать date picker и тп только еще и для json(b), hstore, enum…
А почему решили использовать нативный драйвер, а не нодовский реализованный на js?olsender
16.10.2015 11:23C explain идея интересная, нужно будет подумать — но в ближайшее время вряд ли реализую.
Про встроенные типы понял, такой поддержки не будет, боюсь, никогда. Я принципиальный противник редактирования данных в гридах — данные редактируют либо из прикладного приложения, либо UPDATE statement.
Про драйвер, на сколько помню было 2 причины: мне очень хотелось добиться почти идентичного формата вывода, как в psql, и в javascript-овом драйвере не работал cancel запроса.btd
16.10.2015 11:37Я видимо не дошел до момента когда нужно делать отмену) Нужно будет на досуге посмотреть, может смогу починить.
Раз вы использовали нативный драйвер, вы еще можете из него использовать анализатор запросов родной. У вас тогда очень точная подсветка и анализ получится запроса (ну просто подсвечивать ошибки).
Goobs
16.10.2015 11:10Огромное спасибо!
Оставлю фидбек небольшой. Наблюдаются лаги при наборе текста, возможно, виноват Ace, надо смотреть. Ну и поднять шарилку у себя наверное не самая лучшая идея. Очень не хватает экспорта красивых отчетов в PDF.olsender
16.10.2015 11:28Лаги могут наблюдаться, если latency к подключенной базе большой. Там в фоне работает пополнение autocompletion словаря, и он подмерзает на вычитке данных. Уже исправил, в следующей версии должно быть чуть лучше.
Goobs
16.10.2015 18:43И еще детская болячка — приложение фризится если долго открыто, видать, где-то подтекает. Начинает отжирать процессор на 100%
olsender
16.10.2015 19:58вот это уже хуже, я тоже замечал пару раз последнее время… плохо то, что у меня оно не стабильно фризится — иногда может работать долгое время без проблем. В любом случае спасибо — буду ловить утечку.
sakal
16.10.2015 12:13Можно ли поднять свой сервер для шаринга результатов?
После первых отчётов с графиками, могу сказать что штука очень крутая и у неё большое будущее, если будет приделан экспорт в PDF или свой экспорт/шарингolsender
16.10.2015 12:30А вы пробовали добавить в отчеты markdown? ;)
PS
промахнулся с ответом по существу вопроса: см. ниже
imater
16.10.2015 12:38-2Зашел в комментарии, чтобы найти кто чем пользуется, к сожалению, пока, не нашел.
Чем пользуетесь вы для GUI postgresql?
VProtoss
19.10.2015 08:51Стоит задуматься над оптимизацией соединения. Большая база, не локальная сеть, попытка написать селект — минут 10-15 тупило, пока дописалось слово. Получение инфы о базе — тоже очень долго. При этом процессор грузится на 100% Ubuntu 14.04, x64.
Для маленькой локальной БД работает нормально, хоть и памяти потребляет много. В общем, красиво, но не юзабельно.
ploop
Как запустить-то?
cannot execute binary file: Ошибка формата выполняемого файла
olsender
О какой операционке речь?
Для debian/ubuntu нужно просто запустить бинарник sqltabs.
Замечу еще, что билд сделан только для 64bit версий debian.
ploop
Ну вот, нигде же не помечено! У меня 32-разрядная.
Не предполагается для 32? Самому собирать только?
olsender
Если честно, я не уверен в популярности x32 на сегодняшний день. Сделать то можно, но это наверняка займет время, которого немного. Опять же нужно будет обновлять. Пока я билды делаю наполовину вручную, поэтому вряд ли я возьмусь поддерживать еще одину платформу.
Но в будущем не исключаю… вобщем, нужно подумать.