Привет! Рассказываем о том, что мы сделали в 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

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


  1. mr_bag
    30.07.2019 18:25

    Добрый день.

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

    Спасибо.


    1. moscas Автор
      30.07.2019 18:35

      Опишите подробней, пожалуйста.


  1. eandr_67
    30.07.2019 19:04

    Работа с PostgeSQL в PhpStorm 2019.2:

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

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

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


    1. moscas Автор
      30.07.2019 19:20

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

      Единсвтенное, что могу предложить: во втором случае использовать SQL-генератор (Alt+Ctrl/Cmd+G) на схеме. Там можно указать, чтобы всё квалифицировалось.


  1. gudvinr
    30.07.2019 20:14

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

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


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


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


    1. moscas Автор
      31.07.2019 11:00

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


      1. gudvinr
        31.07.2019 11:38

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


        1. moscas Автор
          31.07.2019 16:20

          Мы посмотрим, спасибо


  1. kuber
    30.07.2019 22:25

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


    1. moscas Автор
      31.07.2019 11:01

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


      1. kuber
        31.07.2019 12:04

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


        1. moscas Автор
          31.07.2019 15:57

          Да, сейчас это работает, если поле редактируемое и его содержимое можно отформатировать. Есть тикет: youtrack.jetbrains.com/issue/DBE-1764
          Думаю, хорошим решением будет показывать отформатированное подсвеченное значение в Quick Doc pop-up


          1. kuber
            31.07.2019 16:09

            Я немного о другом. Я не о столбце XML, а когда из обычных столбцов посредством SELECT в SQL формируется XML. Обновился до 2019.2. Проверил. Работает.


            1. moscas Автор
              31.07.2019 16:20

              Так этот XML все равно как столбец отображается, не? Или я просто не понял что-то :)


  1. Sleuthhound
    31.07.2019 06:46

    А есть сравнительная табличка чем ваш продукт отличается скажем от платной версии DBeaver Enterprise?


    1. moscas Автор
      31.07.2019 11:02

      Таблички такой нет. Но есть место, где описано всё, что мы умеем: www.jetbrains.com/datagrip/features


  1. demas1252
    31.07.2019 14:58

    А добавить поддержку MongoDb не планируется?


    1. moscas Автор
      31.07.2019 14:58

      Планируется. Мы уже начали исслдеования :)