Хочу поделиться новым продуктом со всеми пользователями замечательной базы данных Postgresql. Встречайте — SQL Tabs — графическая SQL консоль для Postgresql. Это новый GUI клиент, в котором можно просматривать объекты базы данных, писать SQL запросы и строить графики.

На сегодняшний день можно скачать версии для OSX и Ubuntu. Пользователи других linux-дистрибутивов могут запустить приложение из исходников. К сожалению, версии для Windows пока нет. Хочется надеяться, что приложение понравится сообществу, и найдутся разработчики, способные помочь в выпуске пакетов под разные платформы: rpm, debian, windows.

Немного информации для разработчиков: SQL Tabs написано на стэке javascript, electron, react? и использует native libpq драйвер для работы с базой. Выпускается под лицензий GPL3.
?
Теперь об основных особенностях SQL Tabs, отличиях от других похожих продуктов и основной мотивации, которая стоит за разработкой.??
??
Начнем с процесса создания соединения, который сделан максимально просто: нужно ввести URL в адресной строке. Так сделано для экономии времени при переключении между серверами, особенно при работе с шардированными базами.

image

Наверное самым большим отличием от подобных приложений будет отсутствие привычного дерева объектов БД в левой боковой панели. Вместо него там расположен навигатор по файловой системе в духе Project Window. Это делает SQL Tabs больше похожим на текстовый редактор а ля Sublime. Как никак, разработка баз данных ничем принципиально не отличается от любой другой разработки: SQL скрипты нужно хранить в файлах, а файлы в git или любой другой scm. При этом, редактируя файл, можно тут же выполнять запросы, переключаясь между разными базами данных на лету.

Тем не менее, навигатор по объектам таки существует, вызвать его можно из меню, выбрав пункт Database Info. Список поддерживаемых объектов пока далеко не полный, это как раз та область, где еще предстоит поработать. Такое решение позволяет получать быстрый доступ к описанию объектов прямо в время написания кода. Например, набрав имя таблицы в редакторе, можно нажать CTRL+I (CMD+I на маке) и увидеть структуру таблицы и наличие индексов, не переключаясь на другое окно.

image

?Из плюшек еще имеются история выполненных запросов с поиском, светлая и темная темы оформления, автодополнение ключевых слов и имен объектов. Для гиков есть 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

Для меня самыми полезными оказались обычные timeseries графики для анализа роста таблиц и распределения данных во времени. Вот синтетический пример такого графика:??

?--- chart area-spline x=1
SELECT d::date, random() FROM generate_series(now()-interval '1 month', now(), interval '1 day') d?

image

А вот картинка из реального примера. Размер дневных партиций и их индексов:??

image???

И в завершении немного о планах. SQL Tabs — очень молодой продукт, всего лишь 4 месяца от роду. За это время ритм разработки удавалось держать на уровне примерно двух релизов за месяц. Каждый релиз, как правило, содержал одну или несколько относительно завершенных фич. На сегодняшний момент основная концепция, которая должна быть в первой версии, реализована. Следующие релизы скорее всего будут направлены на доработку и отладку заявленной функциональности.

Если есть какие-то замечания по продукту — обязательно оформите issue в официальном репозитории github.com/sasha-alias/sqltabs. Я уверен, ваши отзывы очень помогут сделать SQL Tabs лучше и в семействе инструментов для Potgresql прибудет.

Комментарии (66)


  1. ploop
    15.10.2015 13:46
    +2

    Как запустить-то?
    cannot execute binary file: Ошибка формата выполняемого файла


    1. olsender
      15.10.2015 14:31
      +1

      О какой операционке речь?
      Для debian/ubuntu нужно просто запустить бинарник sqltabs.
      Замечу еще, что билд сделан только для 64bit версий debian.


      1. ploop
        15.10.2015 14:47
        +1

        О какой операционке речь?
        Ubuntu 15.04
        Замечу еще, что билд сделан только для 64bit версий debian.
        Ну вот, нигде же не помечено! У меня 32-разрядная.
        Не предполагается для 32? Самому собирать только?


        1. olsender
          15.10.2015 15:17
          +4

          Если честно, я не уверен в популярности x32 на сегодняшний день. Сделать то можно, но это наверняка займет время, которого немного. Опять же нужно будет обновлять. Пока я билды делаю наполовину вручную, поэтому вряд ли я возьмусь поддерживать еще одину платформу.
          Но в будущем не исключаю… вобщем, нужно подумать.


  1. stalkerg
    15.10.2015 14:31
    +9

    SQL Tabs написано на стэке javascript, electron, react

    Для меня это означает: «закапывайте».


    1. olsender
      15.10.2015 14:46

      Я и сам удивляюсь :)


      1. stalkerg
        15.10.2015 14:55

        Сборка самим предполагает полную сборку webkit? :)


        1. olsender
          15.10.2015 14:59

          Достаточно поставить electron-prebuilt из npm


          1. 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.
            


            1. olsender
              15.10.2015 15:12
              +2

              Стоит всерьез задуматься о x64 :)


              1. ploop
                15.10.2015 15:38

                Да я в курсе, но есть на то причины :)
                Ладно, буду ковырять. Так как с Postgresql работаю ежедневно, любые инструменты пригодятся.


                1. mIK_LH
                  15.10.2015 16:21

                  Что-то можете посоветовать кроме pgAdmin?


                  1. Quetzal
                    15.10.2015 16:23
                    +4

                    0xDBE


                  1. ploop
                    15.10.2015 16:36

                    Пока только им и пользуюсь.


                  1. batyrmastyr
                    15.10.2015 17:02
                    +1

                    Valentina Studio, хотя ей очень многого нехватает


                  1. relclick
                    15.10.2015 17:52
                    +4

                    Для простых задач типа просмотра данных — www.psequel.com
                    Для сложных задач — dbeaver.jkiss.org
                    Есть еще Navicat, но он платный.


                    1. faiwer
                      15.10.2015 19:53

                      Для сложных задач — dbeaver.jkiss.org
                      Поразительно. Как он раньше от меня ускользал. Сколько ни искал под linux клиента, такого найти не мог. В итоге остановился на связке heidiSQL + wine. Но на Postgre она обламалась. А тут нативное решение и с поддержкой ssh-туннелей из коробки (heidi тоже умеет, но под wine-ом мне завести не удалось).


                      1. ploop
                        15.10.2015 22:56

                        Да, тоже не знал про него.


                      1. ploop
                        16.10.2015 10:32

                        На самом деле не очень. Конечно, контекстное дополнение радует, переход по связям в результатах запроса и прочие вкусности, но много глюков (банальные перевод строки внутри запроса уже не переваривает), сложно работать с объектами plpgsql (только руками), дерево объектов только делает вид, что обновляется по F5, ну и т.д.


              1. stalkerg
                15.10.2015 17:05

                Даже если у меня sparc или arm? (а они у меня есть)


          1. stalkerg
            15.10.2015 17:05

            electron-prebuilt из npm

            Это как то противоречит моему:
            Сборка самим


    1. kaichou
      15.10.2015 16:45
      -2

      > SQL Tabs написано на стэке javascript, electron, react
      интересно, что вообще побуждает людей на такое?


      1. olsender
        15.10.2015 17:21
        -1

        богатая фантазия :P


      1. JC_Piligrim
        15.10.2015 19:51
        +12

        Люди пишут на том, что уже умеют и знают, вместо того чтобы учить что-нибудь вроде C++, в процессе растерять энтузиазм и в итоге совсем забить.
        Если у C++ охренеть какой высокий порог вхождения по современным меркам — разве это проблема в людях, а не в языке? Может мало кто хочет красноглазить, у людей помимо программирования есть ещё семья, увлечения. Вот и экономят на программировании, делая на том, что уже знают. Не вижу проблемы.

        P.S. Что-то не видно качественных open source GUI для postgres на «ТРУЪшных» языках. С чего бы это?


        1. stalkerg
          16.10.2015 16:51

          Мне кажется но порог вхождения в C++/Qt (и тем более QML/JavaScript) будет не намного выше чем выше указанная связка.

          P.S. Что-то не видно качественных open source GUI для postgres на «ТРУЪшных» языках. С чего бы это?

          Почти всем хватает psql. GUI хотят те кто приходит в postgres из других баз или платформ (windows). Основные разработчики по сему особо и не заморачиваются. Будет большой спрос — напишут.


          1. olsender
            16.10.2015 20:08
            +1

            Почти всем хватает psql. GUI хотят те кто приходит в postgres из других баз или платформ (windows).


            Мне это видится скорее проблемой, чем преимуществом. Мне и самому в 90% случаев хватает psql. Но отсутсвие нормальных тулов отпугивает от Postgresql многих потенциальных пользователей.
            Кроме того, psql хватает для сугубо административных задач. Для разработки еще туда-сюда — можно пережить, скрестив его с любим редактором. Но для быстрого анализа данных, отладки сложных запросов и т.п. имхо труба…


            1. stalkerg
              17.10.2015 13:46

              Но отсутсвие нормальных тулов отпугивает от Postgresql многих потенциальных пользователей.

              С этим я с вами согласен. Выше я скорее говорил, по чему этого сейчас не происходит.


  1. printercu
    15.10.2015 14:34
    +1

    Для сборки пакетов под все платформы разом можно посмотреть github.com/jordansissel/fpm
    Сам не собирал, но вдруг пригодится.


    1. olsender
      15.10.2015 14:44
      +1

      Спасибо! Обязательно попробую.


  1. krig
    15.10.2015 14:51
    +1

    Удобная минималистичная гуя. Но не понял как выбирать из списка автокомплита: например, начинаю печатать имя таблицы в from, он показывает мне варианты, среди них есть нужный, жму вниз — выпадающий список просто исчезает, хотя я ожидаю что будет выделен верхний элемент в списке.

    Второй момент — пароль в строке ввода остается открытым, что не очень хорошо, я не хочу показывать свой пароль к базе своим коллегам, я хочу им показывать только запросы и результаты их выполнения.


    1. olsender
      15.10.2015 14:53

      Tab / Shift+Tab :)
      Я тоже иногда путаюсь, наверное следует добавить стрелки тоже.


      1. krig
        15.10.2015 15:13

        Спасибо, работает.


    1. olsender
      15.10.2015 15:03

      Пароль лучше не вводить в URL. Если нужно, то он должен запросить пароль отдельно и запомнит его до следующего перезапуска. А для постоянного хранения паролей есть pgpass.


      1. krig
        15.10.2015 15:14

        Ясно, спасибо.


  1. josser
    15.10.2015 16:01
    +1

    Это все конечно еще в бете, но мне кажется это то что надо: photonkit.com


  1. defuz
    15.10.2015 18:27
    +3

    Да что же оно все для Postgres страшное такое. :(


    1. stalkerg
      15.10.2015 19:08
      +2

      Надеюсь скоро появится, что то на Qt5. ;)


    1. olsender
      15.10.2015 19:43
      +1

      Как получилось, извиняйте :)
      А что не страшное для примера?


      1. defuz
        15.10.2015 21:09

        На мой вкус Sequel Pro очень хорош, но он не работает с Postgres. Еще неплох Navicat, но он платный. А все, что я пробовал для Postgres выглядит как поделка на скорую руку. И дело даже не в аскетичном наборе возможностей, а именно в неаккуратности интерфейса.


      1. defuz
        15.10.2015 21:17

        Что касается SQL Tabs (я так понимаю, вы имеете прямое отношение к его разработке), то в нем прямо сразу узнается «поделка на бутстрепе». Могу предложить присмотрется по Атому, он построен на том же стеке, но по нему не сразу и скажешь, что там использован html/css/javascipt, а выглядит он как нативное приложение. Slack тоже выглядит неплохо.


        1. olsender
          15.10.2015 22:18

          Это дело поправимое :) Главное, что стэк позволяет сделать какой угодно дизайн… в будущем. SQL Tabs всего лишь четыре месяца и это еще версия 0.x. И да, я автор и единственный разработчик. Так что по дизайну — это на самом деле поделка на бутстрапе, в css лучше не заглядывать — там страх и ужас! Темная тема должна выглядеть немного более причесанной — я ей больше пользуюсь.


  1. scrutari
    15.10.2015 19:24
    -1

    Интересно, а почему GPL?


    1. olsender
      15.10.2015 19:49

      А почему такой вопрос? ;)


      1. scrutari
        17.10.2015 00:07

        GPL лицензии все-таки весьма запретительные. Поэтому мне интересно, почему люди выбирают их: может быть, они используют компонент, из-за которого другую лицензию не выберешь? может быть, авторы специально хотят, чтобы их кодом никто не воспользовался, не выложив свои наработки в open source? а может, это просто первая пришедшая на ум open source лицензия :)


        1. olsender
          17.10.2015 09:55
          +2

          Решение выпускаться под GPL вполне взвешенное. Компоненты, которые можно было бы переиспользовать в других проектах, выделены отдельно и лицензируются под MIT лицензией. Сам же SQL Tabs — не библиотека, а конечный продукт. И хотелось бы, чтобы в случае форков он оставался открытым.


          1. scrutari
            17.10.2015 10:16

            Круто. Спасибо за ответ.


  1. bo883
    15.10.2015 21:59
    +1

    А мне понравилась минималистичная guiконсолька, прикольно. Я только тему не могу сменить. Удачи парни.


  1. 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)
    


    1. olsender
      16.10.2015 09:14

      Это при запуске из исходников?


      1. Timosha
        16.10.2015 13:13

        ага, по README кстати не получилось, пришлось вместо npm install jsx поставить npm install react-tools


        1. olsender
          16.10.2015 13:15

          Поправлю README значит, спасибо!


  1. btd
    16.10.2015 10:40

    Хорошая идея. Сам над тем же работал, но времени не хватало, переключился на другие задачи.

    картинка
    image


    1. olsender
      16.10.2015 10:54

      Спасибо за конструктивный отзыв! Редактор взял Ace, т.к. он умеет подсвечивать хранимые процедуры на разных языках и json.
      Что вы имеете ввиду под поддержкой встроенных типов?
      explain вроде нормально отображается — текстовое дерево, как в psql )


      1. btd
        16.10.2015 11:05

        Вот смотрите как можно отображать explain plan (http://explain.depesz.com/s/i7LN), я не говорю, что копируйте один в один, но согласитесь, когда красным явно показано какая часть тормозит, довольно заметно. Я использовал CodeMirror, он вроде бы все тоже самое умеет делать.
        Под поддержкой встроенных типов я имею в виду, что н-р если есть возможность редактировать строки после выборки, то если поле timestamp показывать date picker и тп только еще и для json(b), hstore, enum…

        А почему решили использовать нативный драйвер, а не нодовский реализованный на js?


        1. olsender
          16.10.2015 11:23

          C explain идея интересная, нужно будет подумать — но в ближайшее время вряд ли реализую.
          Про встроенные типы понял, такой поддержки не будет, боюсь, никогда. Я принципиальный противник редактирования данных в гридах — данные редактируют либо из прикладного приложения, либо UPDATE statement.
          Про драйвер, на сколько помню было 2 причины: мне очень хотелось добиться почти идентичного формата вывода, как в psql, и в javascript-овом драйвере не работал cancel запроса.


          1. btd
            16.10.2015 11:37

            Я видимо не дошел до момента когда нужно делать отмену) Нужно будет на досуге посмотреть, может смогу починить.
            Раз вы использовали нативный драйвер, вы еще можете из него использовать анализатор запросов родной. У вас тогда очень точная подсветка и анализ получится запроса (ну просто подсвечивать ошибки).


  1. Goobs
    16.10.2015 11:10

    Огромное спасибо!

    Оставлю фидбек небольшой. Наблюдаются лаги при наборе текста, возможно, виноват Ace, надо смотреть. Ну и поднять шарилку у себя наверное не самая лучшая идея. Очень не хватает экспорта красивых отчетов в PDF.


    1. olsender
      16.10.2015 11:28

      Лаги могут наблюдаться, если latency к подключенной базе большой. Там в фоне работает пополнение autocompletion словаря, и он подмерзает на вычитке данных. Уже исправил, в следующей версии должно быть чуть лучше.


      1. Goobs
        16.10.2015 18:43

        И еще детская болячка — приложение фризится если долго открыто, видать, где-то подтекает. Начинает отжирать процессор на 100%


        1. olsender
          16.10.2015 19:58

          вот это уже хуже, я тоже замечал пару раз последнее время… плохо то, что у меня оно не стабильно фризится — иногда может работать долгое время без проблем. В любом случае спасибо — буду ловить утечку.


          1. VProtoss
            19.10.2015 08:56

            На удаленной базе при медленном коннекте, почти сразу подвисает.


  1. sakal
    16.10.2015 12:13

    Можно ли поднять свой сервер для шаринга результатов?
    После первых отчётов с графиками, могу сказать что штука очень крутая и у неё большое будущее, если будет приделан экспорт в PDF или свой экспорт/шаринг


    1. olsender
      16.10.2015 12:30

      А вы пробовали добавить в отчеты markdown? ;)

      PS
      промахнулся с ответом по существу вопроса: см. ниже


  1. olsender
    16.10.2015 12:25

    Вообще можно конечно. Там механизм очень простой — на сервер отправляется JSON с помощью примитивного REST запроса. Нужно только свой URL вписать и сохранить прилетевший JSON.
    Рендерер JSON-ов идет отдельной компонентой под MIT лицензией: sqldoc.


  1. imater
    16.10.2015 12:38
    -2

    Зашел в комментарии, чтобы найти кто чем пользуется, к сожалению, пока, не нашел.

    Чем пользуетесь вы для GUI postgresql?


  1. VProtoss
    19.10.2015 08:51

    Стоит задуматься над оптимизацией соединения. Большая база, не локальная сеть, попытка написать селект — минут 10-15 тупило, пока дописалось слово. Получение инфы о базе — тоже очень долго. При этом процессор грузится на 100% Ubuntu 14.04, x64.
    Для маленькой локальной БД работает нормально, хоть и памяти потребляет много. В общем, красиво, но не юзабельно.