company_banner

DataGrip 2019.2: Управление соединениями, поиск по данным, фильтрация в навигации

    Привет! Рассказываем о том, что мы сделали в DataGrip за четыре месяца. Если вы используете поддержку баз данных в других наших IDE, этот пост для вас тоже.



    Окно инструментов Services


    У IDE на платформе IntelliJ появилось новое окно инструментов: Services. В DataGrip здесь отображены соединения.



    Каждый узел дерева, будь то служба, источник данных, соединение, можно открыть в отдельной вкладке: нажмите Show in New Tab на панели инструментов. Или используйте drag-and-drop. Если на соединении горит зеленый кружок, это значит, что оно активно. Закрыть соединение можно из контекстного меню.

    Результаты запросов прикреплены к соответствующим соединениям. Если хотите вернуть вид “как раньше”, отключите дерево служб в настройках отображения, нажав на иконку шестеренки.



    Таймер запроса


    В окне Services добавили возможность смотреть, сколько времени занимает запрос: часы тикают справа от консоли, из которой он запущен.

    Docker


    Еще одна служба, которая может появиться в этом окне, — Docker, если вы используете соответствующий плагин.



    Сочетание клавиш для отображения/скрытия окна Services — Alt/Cmd+8.

    Поиск по данным


    Ищите данные, даже если не помните, где они хранятся. Выделите источник данных, группу источников или, наоборот, только отдельные таблицы, и нажмите Ctrl/Cmd+Alt+Shift+F. Или выберите Full-text search из контекстного меню.



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



    Результаты выглядят так:



    По клику на результат откроется редактор данных, в котором будет применен фильтр, чтобы показать только найденные строчки. Если столбцов слишком много и непонятно, где то, что вы нашли, используйте текстовый поиск: Ctrl/Cmd+F.



    Детали:
    – В PostgreSQL, MySQL и MariaDB можно искать только по проиндексированным столбцам. Для этого выберите ‘Only columns with full-text search indexes’ в списке ‘Search in’.
    В PostgreSQL будет такой запрос:where col @@ plainto_tsquery('query')
    В MySQL и MariaDB такой:where match(col) against ('query' in natural language mode)
    – В Oracle, DataGrip будет использовать индексы context, ctxrule, ctxcat, если они есть.
    – В SQL Server, если построены полнотекстовые индексы, DataGrip генерирует запрос с предложением `WHERE CONTAINS(col, N'text')`.
    – Поиск ищет в столбцах, для которых не поддерживается LIKE. Например, JSON-столбцы будут предварительно сконвертированы в строку.
    – Для Cassandra DataGrip запускает несколько запросов для одной таблицы, потому что оператор OR не поддерживается.

    Редактор данных


    Быстрое изменение размера страницы


    Меняйте размер страницы в редакторе данных, не ходя в настройки.



    Имена вкладок


    Теперь вы сами можете называть вкладки результатов: напишите имя в комментарии перед запросом.



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



    Проводник базы данных


    Быстрый бэкап таблицы


    Копировать таблицы при помощи drag-and-drop можно давно, но раньше это не работало, если перетаскивать в ту же схему. Теперь работает! Удобно, если делаете бэкап данных перед важной операцией.



    Быстрое создание группы


    Создавайте группы источников данных, перетаскивая один источник на другой. Если нужно переместить источник данных в существующую группу, это тоже делается мышкой. Любителям клавиатуры напоминаем, что для этого есть клавиша F6.



    Принудительное обновление


    Новое действие Force Refresh подгрузит информацию обо всех объектах базы, предварительно очистив кэш. Может быть полезно, если что-то “залипло” в памяти и вы не видите актуальной картины.



    Активные соединения


    С этой версии маленький зеленый кружок на иконке источника данных означает, что соединение с ним активно.



    Комментарии к таблицам


    После включения View | Appearance | Descriptions in Tree Views комментарии к таблицам отобразятся в проводнике.



    Фильтрация по источникам данных


    Если у вас много похожих баз данных, было неудобно искать объекты: например, если вы ищете таблицу, а таких таблиц у вас десять, они все показывались в выдаче.
    Сейчас можно указывать, где искать: выберите конкретный источник данных или группу источников.



    То же работает при поиске кода в Find In Path.



    Помощь при написании кода


    Системные объекты


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

    Объекты из этих каталогов часто используют в запросах, поэтому их нужно показывать в автодополнении и правильно подсвечивать: IDE не должна думать, что это какие-то неизвестные объекты.

    Раньше, чтобы это работало, системные схемы надо было добавлять в проводник, потому что DataGrip ”знал” только о тех объектах, которые проинтроспектированы. Но системные схемы не меняются, получать информацию о них каждый раз не имеет смысла. К тому же, они не всегда нужны в проводнике и мешаются там с рабочими схемами.

    Значок молнии напротив схемы означает, что информация о ее объектах всегда есть у DataGrip, даже если вы не добавили ее в проводник.



    Вот примеры некоторых системных схем:
    PostgreSQL: pg_catalog, information_schema
    SQL Server: INFORMATION_SCHEMA
    Oracle: SYS, SYSTEM
    MySQL: information_schema
    DB2: SYSCAT, SYSFUN, SYSIBM, SYSIBMADM, SYSPROC, SYSPUBLIC, SYSSTAT, SYSTOOLS

    Предупреждения и исправления


    Теперь из окна предупреждения можно сразу решить проблему, о которой вам сообщили. Например, в окне об опечатке DataGrip предлагают ее исправить, а если IDE предупреждает о том, что нет псевдонима, вам тут же предлагается его завести. Для этого кликните действие слева внизу или нажмите Alt+Shift+Enter.


    Alt+Enter по-прежнему работает и показывает список всех возможных действий в данном контексте.

    Мы также добавили несколько новых инспекций.

    Необязательный CASE

    Если оператор CASE можно убрать и привести код к более читаемому виду, DataGrip предложит сделать это.

    С использованием IF:



    С использованием COALESCE:



    Возможная обрезка строки

    IDE предупредит, если записываемое значение строки длиннее предполагаемого.



    Конвертация GROUP BY в DISTINCT

    Теперь вы можете конвертировать GROUP BY в DISTINCT, если все столбцы в предложении SELECT есть и в GROUP BY.



    Редактор кода


    Новые настройки для передвижения каретки


    Мы изменили поведение движения каретки по умолчанию. Теперь DataGrip передвигает каретку к концу текущего слова, если вы прыгаете по словам. Это поведение настраивается в настройках: Editor | General.



    Обычно это действие выполняется стрелками при нажатом Ctrl дляWindows/Linux и нажатом Opt для MacOS. Поведение по умолчанию в разных операционных системах отличается: теперь в наших IDE это работает “как на Маке”.
    Раньше:



    Теперь:



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


    Добавили новое действие: Select current statement. Его можно найти при помощи Find Action (Ctrl/Cmd+Shift+A). Если используете действие часто, назначьте сочетание клавиш.



    Сворачивание чисел


    Большие числа можно сворачивать при помощи Ctrl/Cmd+Minus.



    Еще


    • DataGrip 2019.2 использует JetBrains Runtime 11, несертифицированный форк OpenJDK 11.
    • [Cassandra] Теперь можно редактировать столбцы таких типов: set, list, map, tuple, udt, inet, uuid, timeuuid.
    • Новые элементы в списке автодополнения IS NULL и IS NOT NULL. Раньше сравнения с NULL надо было набирать по отдельности.
    • Настройка Jump outside closing bracket/quote with Tab включена по умолчанию. По клавише Tab курсор перемещается вовне из блока кавычек и скобок.
    • Настройка Surround a selection with a quote or brace включена по умолчанию. Если при выделенном фрагменте кода набрать кавычку или скобку, фрагмент окажется внутри кавычек или скобок.
    • Действие Introduce alias (назначить псевдоним) стало частью меню Refactoring.
    • Наладили работу с PostgreSQL 12. Больше информации здесь: DBE-8384.
    • Добавили логичности в режим только для чтения. Раньше эта настройка включала сразу два режима: на уровне IDE (DataGrip анализирует, какие запросы изменяют данные) и на уровне драйвера (если он реализован). В IDE мы добавили возможность выполнить запрос после предупреждения, если очень надо. Но раньше режим только для чтения все равно блокировал такие запросы на уровне драйвера: DBE-8145. Теперь не блокирует.

    Вот и всё!


    Команда DataGrip
    JetBrains
    504,12
    Делаем эффективные инструменты для разработчиков
    Поделиться публикацией

    Комментарии 31

      0
      Добрый день.

      Я так и не понял, как скопировать данные из поля в виде sql in list?
      (1,2,3,4,5,6)
      ('one','two','three')

      Спасибо.
      0
      Работа с PostgeSQL в PhpStorm 2019.2:

      1. При выполнении Dump Data to File(s) -> SQL Inserts с включенной опцией Single File получаю sql-файл в котором создание таблиц и их заполнение производится в алфавитном порядке имён таблиц. При наличии у таблиц внешних ключей использовать полученный дамп для переноса/восстановления данных невозможно.

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

      2. При экспорте вышеуказанной командой сразу нескольких схем в команды создания таблиц имя схемы не добавляется. При этом в команды INSERT имена схем добавляются. В результате, опять же, использовать полученный дамп невозможно.
        0
        К сожалению, пока всё так. Будем над этим работать, когда займёмся полноценными миграциями.

        Единсвтенное, что могу предложить: во втором случае использовать SQL-генератор (Alt+Ctrl/Cmd+G) на схеме. Там можно указать, чтобы всё квалифицировалось.
        0
        Раньше, чтобы это работало, системные схемы надо было добавлять в проводник, потому что DataGrip ”знал” только о тех объектах, которые проинтроспектированы. Но системные схемы не меняются, получать информацию о них каждый раз не имеет смысла. К тому же, они не всегда нужны в проводнике и мешаются там с рабочими схемами.

        В постгресе, если база интенсивно использует хранимые процедуры, к примеру, то постгрес генерирует pg_temp_* таблицы, и при хранении больших данных (вроде строк — тексты, описания, адреса всякие) таблицы-сателлиты pg_toast_*, в которых хранит в сжатом виде.


        Десятки и сотни таких таблиц, занимающих практически весь листинг браузера схем (что в общем-то, не так уж редко для случаев когда конкретный инстанс — это не тестовая база в докере на локальном ПК) доставляет дискомфорт больший, чем две системные таблицы.


        Это всё печально весьма, буквально сегодня сидел, вытыкивая системные схемы из выборки. Задаче, которая этому посвящена, в youtrack уже больше двух лет, по-моему.

          0
          Про эту проблему знаем, да. youtrack.jetbrains.com/issue/DBE-6445. У тикета 5 голосов, поэтому он не в высоком приоритете. Но мы поглядим, что можно сделать.
            0

            Ну да, в трекере не одна такая проблема.
            Я про неё тоже знаю, но в данном случае даже нет никакого обходного костыля, чтобы не так сильно мешало. Просил хотя бы добавить возможность фильтровать схемы в стандартный object filter, две версии назад говорили что можно будет в качестве временного решения добавить и тоже ничего.

              +1
              Мы посмотрим, спасибо
                0
                В багфиксе выкатим вот что:
                Схем pg_toast и pg_temp не будет вообще нигде. Это решение вам подходит?
                  0

                  Конечно. Они в себе не содержат объектов для навигации, поэтому вряд ли есть люди, которым эти схемы нужны в списке.


                  Только про pg_toast_temp_* тоже не забудьте (:

                    +1
                    не забыли :)
            0

            Поддержка XML в Oracle Database уже появилась?

              0
              Какого рода? XML давно уже подсвечивается везде.
                0

                Имеется ввиду когда прямо в SQL запросе формируешь XML. Например,
                SELECT XMLELEMENT("Employee", ename) FROM emp;
                Datagrip корректно отобразит результат?

                  0
                  Да, сейчас это работает, если поле редактируемое и его содержимое можно отформатировать. Есть тикет: youtrack.jetbrains.com/issue/DBE-1764
                  Думаю, хорошим решением будет показывать отформатированное подсвеченное значение в Quick Doc pop-up
                    0
                    Я немного о другом. Я не о столбце XML, а когда из обычных столбцов посредством SELECT в SQL формируется XML. Обновился до 2019.2. Проверил. Работает.
                      0
                      Так этот XML все равно как столбец отображается, не? Или я просто не понял что-то :)
              0
              А есть сравнительная табличка чем ваш продукт отличается скажем от платной версии DBeaver Enterprise?
              0
              А добавить поддержку MongoDb не планируется?
                0
                Планируется. Мы уже начали исслдеования :)
                0
                Всем добрый день!
                Подскажите, пожалуйста, не далекому. Я хочу сохранить красиво результаты выборки, использую обычную кнопку Dump Data->To File
                Изначально результат сохранялся без названия столбцов, поковырялся в настройках, сделал так:
                image
                Выглядит вроде не плохо, но на самом деле в эксель файле все данные запихиваются в одну ячейку на строке:
                image
                Что я не так делаю в настройках? Пожалуйста, подскажите

                p.s. ещё хороший момент сохранять вместе с результатом ещё и сам запрос, в PostgreSQL это делалось просто кнопкой Copy to Excel
                  0
                  Картинки не прогрузились :(
                    0
                    пофиксил
                      0
                      1. Вам надо попробовать сделать CSV а не TSV, возможно Эксель лучше понимает именно когда разделитель, запятая. Но вообще для экспорта в Эксель есть отдельный реквест: youtrack.jetbrains.com/issue/DBE-4123

                      2. Запрос вместе с результатами: о таком не думали, даже реквеста в трекере нет.
                        0
                        Вы оказались правы, в TSV информация по разным ячейкам растеклась. Спасибо за помощь!
                        А на счет запроса вместе с результатом: буду ждать, хорошая фича для отчетности
                          0
                          Так я наоборот CSV предложил, потому что у вас Value separator — Tab стот на картинке. Ну, в общем, хорошо что всё хорошо.
                          А про запрос можно завести реквест :)
                            0
                            оу, так у меня изначально и был выбран формат CSV. Сейчас попробовал все типы для Value Separator — все равно в одну ячейку данные съезжают, а в TSV при Value Separator — Tab все красиво сохраняется, я не понимаю в чем логика)
                  0

                  Хотелось бы, чтобы вот эту проблему поправили: https://youtrack.jetbrains.com/issue/DBE-2500


                  А то сейчас невозможно использовать DataGrip в энтерпрайзе с Ораклом. Потому что select any dictionary там не дают, а дают очень похожую роль, в которой есть dba_source и другие dba-вьюшки. Но DataGrip их не использует, а использует all-вьюшки, в которых в этом случае ничего толком нет.

                  Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                  Самое читаемое