Привет! Как водится, три раза в году мы рассказываем о том, над чем работали. Это статья о том, что нового в DataGrip 2019.3, а значит и во всех IDE от JetBrains с поддержкой баз данных.
![](https://habrastorage.org/r/w1560/webt/7z/ye/kg/7zyekglfv0k-p0a37bc3w4fjpre.png)
Это будет наша первая публикация на Хабре, в комментариях к которой не спросят: «А когда планируется поддержка Монги?»
Встречайте! Что работает в этой версии:
Интроспекция: В проводнике базы данных отображаются коллекции и поля. Мы анализируем первые 10 документов из каждой коллекции, чтобы иметь представление о ее полях.
Если вы хотите увеличить это число, укажите его в JDBC-параметре fetch_documents_for_metainfo на вкладке Advanced в свойствах источника данных.
![](https://habrastorage.org/r/w1560/webt/n9/ao/tt/n9aottnugtnunvhx-ebb7yjxwu4.png)
Просмотр данных: Просматривайте коллекции в табличном виде по страницам. Можно сортировать по значениям и использовать фильтр.
![](https://habrastorage.org/r/w1560/webt/2q/ds/1l/2qds1litr15ixmcyqacpqtf_4rq.png)
Древовидный просмотр: Специально для MongoDB мы сделали древовидный просмотр данных. Чтобы его включить, нажмите на шестеренку, затем View as… | Tree. Еще такой просмотр работает для массивов PostgreSQL, и мы планируем сделать так, чтобы в виде дерева можно было смотреть JSON- и XML-поля.
![](https://habrastorage.org/r/w1560/webt/yv/sl/s8/yvsls8iu83udmcz29rs2ovl29hw.png)
Консоль запросов: Сейчас нет поддержки при написании кода, но запросы работают. Для того чтобы запустить запрос, поставьте на него каретку и нажмите Ctrl/Cmd+Enter или кнопку Run на панели инструментов.
Если вы работаете в IDE с поддержкой JavaScript, запросы будут подсвечены. Подсветку в DataGrip добавим позже.
![](https://habrastorage.org/r/w1560/webt/qh/9m/g2/qh9mg2xbowuz8ifc7lxi-awawhs.png)
Первая версия давно ожидаемого отладчика для Oracle. Сейчас он работает с процедурами, функциями, пакетами, триггерами и анонимными блоками.
Не забудьте, что объект должен быть скомпилирован для отладки. Чтобы это сделать, используйте контекстное меню: Database tools | Recompile.
![](https://habrastorage.org/r/w1560/webt/b1/5a/-w/b15a-w3udxubriker-wmfimulms.png)
Отметьте чекбокс With “debug”. Если процедура уже скомпилирована для отладки, на ее иконке есть зеленый жучок.
![](https://habrastorage.org/r/w1560/webt/29/m3/dh/29m3dhldylgc8vlgwyrruhshmte.png)
Чтобы запустить отладчик в консоли, нажмите кнопку Debug на панели инструментов.
![](https://habrastorage.org/webt/8t/8q/y-/8t8qy-gxcdqpbromu-afeaahae4.gif)
Подробности об отладчике — у нас в документации (на английском). Мнения, комментарии, пожелания пишите, пожалуйста, сюда.
Две процедуры можно сравнить, выделив их и нажав Ctrl/Cmd+D. Раньше сравнивались только сигнатуры, теперь — и исходники.
![](https://habrastorage.org/r/w1560/webt/tw/pq/3c/twpq3cmcvu74xpkrxcj86yx9_b0.png)
Когда вы обновляете исходный код объекта, DataGrip предупреждает, если за это время код изменился в базе. Теперь для решения конфликтов вам предложат слияние при помощи трех панелей: слева вы увидите вашу версию, справа — то, что пришло из базы, а в середине — результат их слияния.
![](https://habrastorage.org/r/w1560/webt/is/6c/k4/is6ck4nht7irz_sxs9awkqdzhjg.png)
Чтобы быть уверенным, что вы не перепишете чужой код, проверьте, что настройка Warn if editing outdated DDL включена в свойствах источника данных.
В исходном коде объектов теперь работает помощь при написании кода. Например, можно раскрыть звездочку.
![](https://habrastorage.org/r/w1560/webt/uq/pl/cp/uqplcpy3-pvuhplsk5wjv_pjy3w.png)
Если настройка pretty-printed отключена, PostgreSQL отдает исходники с большим количеством избыточных скобок:
![](https://habrastorage.org/r/w1560/webt/tr/pr/q6/trprq6ukpittz41aof7j3eipte4.png)
Мы решили включить ее по умолчанию. В нашем примере скобок не осталось :)
![](https://habrastorage.org/r/w1560/webt/qs/mc/vj/qsmcvjobrlr7ghna8yys8mbwrwq.png)
Но обратим внимание на то, что PostgreSQL пишет в своей документации:
Пользователи жаловались, что не всегда понятно — запрос все еще выполняется или уже завершен. Мы добавили крутящуюся иконку на панель слева и таймер в текстовый редактор.
![](https://habrastorage.org/webt/ge/ov/a3/geova3nhpntc3cmv7rw-cqtuwqa.gif)
Это новый тип визуализации данных от планировщика. Чтобы открыть флейм-чарт (или флейм-граф, кому как нравится), нажмите кнопку слева:
![](https://habrastorage.org/r/w1560/webt/mj/fy/6x/mjfy6xnroo8q6bcudhzyv7woi8i.png)
Выглядит так:
![](https://habrastorage.org/r/w1560/webt/jz/bc/ly/jzbclyuoc6ul9rib3aimwlqa5o4.png)
Инспекции
DataGrip предупредит, если вы:
… используете оператор COALESCE без надобности: например, если первый аргумент никогда не бывает NULL. Вам предложат удалить ненужный код.
![](https://habrastorage.org/r/w1560/webt/vs/ya/so/vsyasocmkwij1bpdoc6kfzwq1fi.png)
… вставляете NULL в столбец, для которого это запрещено.
![](https://habrastorage.org/r/w1560/webt/7o/m-/ft/7om-ftdribo9pef2cjwexd0qyxc.png)
… не перечислили все столбцы в предложении INSERT.
![](https://habrastorage.org/r/w1560/webt/fg/lj/4b/fglj4bzwa59znp8pli1omqo1858.png)
… используете оператор «равно» для сравнения с NULL. Это сравнение ложно, потому что NULL это «неизвестно». Так как два значения, которые «неизвестны», сравнить нельзя, надо использовать специальный оператор IS NULL.
![](https://habrastorage.org/r/w1560/webt/hy/f0/xw/hyf0xwxmjj3k9hxhw2itc-ijrbo.png)
… используете предложение ORDER BY в подзапросе. Эта инспекция работает только в SQL Server.
![](https://habrastorage.org/r/w1560/webt/ux/o8/up/uxo8upgouwhequomduxldjtbaqc.png)
… используете одновременно TOP и OFFSET. Это тоже инспекция для SQL Server.
![](https://habrastorage.org/r/w1560/webt/ph/h2/r2/phh2r2r49am-nbedrd4gnnmpqik.png)
Конвертация конструкций
Сравнение с AND можно конвертировать в BETWEEN, и наоборот.
![](https://habrastorage.org/r/w1560/webt/fp/n9/eu/fpn9euhg-yvzyt2nf_3-44rofis.png)
JOIN ON можно конвертировать в JOIN USING, и наоборот.
![](https://habrastorage.org/r/w1560/webt/sp/6e/ab/sp6eabtcmbdywbua32n4guwvagg.png)
Текстовый редактор
Новое действие: сортировка строк по алфавиту. Может быть полезно при работе в CSV-файлами или поиске дубликатов в списке значений. Напоминаем, что вызывать любое действие можно по Ctrl/Cmd+Shift+A.
![](https://habrastorage.org/webt/c1/3g/qc/c13gqcy5orbbd25yfw_vvhczv3c.gif)
Сделали поиск по выделенному фрагменту кода. Сначала выделите область для поиска, потом нажмите Ctrl/Cmd+F. Если хотите искать по всему файлу выделенный фрагмент, нажмите сочетание клавиш еще раз.
![](https://habrastorage.org/webt/rn/xg/8l/rnxg8l-9neaimtweooqyg-x0tro.gif)
Фильтрация объектов
Если используете фильтр объектов для проводника, например такой:
![](https://habrastorage.org/r/w1560/webt/sc/7b/mv/sc7bmvdba5xisqd-yr74gr7puhu.png)
…то объекты, которые скрыты из проводника, будут считаться неизвестными для редактора кода. То есть мы предполагаем, что, если вы скрыли объекты из проводника, то и работать из SQL вы с ними не хотите.
![](https://habrastorage.org/r/w1560/webt/ck/ha/uu/ckhauugs5-8swkff86arwrg3hdy.png)
Генерация кода
В меню Generate, которое вызывается по Alt+Ins/Cmd+N, много новых объектов: материализованные представления, коллации, перечисления и не только.
![](https://habrastorage.org/webt/pc/bk/dg/pcbkdgghf2hhb4uar8nagtl6t-w.gif)
Теперь, если в результате есть столбцы с одинаковыми именами, мы показываем, из какой таблицы они взяты. Это удобно еще и потому, что эти имена используются при экспорте: например, если вы создаете новую таблицу из результата, у вас не будет конфликта имен.
![](https://habrastorage.org/r/w1560/webt/kb/pm/g-/kbpmg-u1tsveqdlifvojxjzqu10.png)
Действие Modify Table работает из редактора данных. Например, если вы работаете с данными таблицы и решили добавить в нее столбец, теперь это сделать проще: нажмите Ctrl/Cmd+F6 и редактируйте таблицу.
![](https://habrastorage.org/r/w1560/webt/d4/an/hq/d4anhq2w87qzlezwddmmrp_rqzi.png)
Текст ошибки соединения можно погуглить, нажав на кнопку:
![](https://habrastorage.org/r/w1560/webt/so/hw/v1/sohwv1xgh1n56_6fomlby1az1-i.png)
На этом всё!
— Скачать триал на месяц
— Твитер, который мы читаем
— Почта, которую мы читаем: datagrip@jetbrains.com
Как всегда, ждем комментариев о том, что понравилось, и о самых важных для вас тикетах в Ютреке :)
Команда DataGrip
![](https://habrastorage.org/webt/7z/ye/kg/7zyekglfv0k-p0a37bc3w4fjpre.png)
Поддержка MongoDB
Это будет наша первая публикация на Хабре, в комментариях к которой не спросят: «А когда планируется поддержка Монги?»
Встречайте! Что работает в этой версии:
Интроспекция: В проводнике базы данных отображаются коллекции и поля. Мы анализируем первые 10 документов из каждой коллекции, чтобы иметь представление о ее полях.
Если вы хотите увеличить это число, укажите его в JDBC-параметре fetch_documents_for_metainfo на вкладке Advanced в свойствах источника данных.
![](https://habrastorage.org/webt/n9/ao/tt/n9aottnugtnunvhx-ebb7yjxwu4.png)
Просмотр данных: Просматривайте коллекции в табличном виде по страницам. Можно сортировать по значениям и использовать фильтр.
![](https://habrastorage.org/webt/2q/ds/1l/2qds1litr15ixmcyqacpqtf_4rq.png)
Древовидный просмотр: Специально для MongoDB мы сделали древовидный просмотр данных. Чтобы его включить, нажмите на шестеренку, затем View as… | Tree. Еще такой просмотр работает для массивов PostgreSQL, и мы планируем сделать так, чтобы в виде дерева можно было смотреть JSON- и XML-поля.
![](https://habrastorage.org/webt/yv/sl/s8/yvsls8iu83udmcz29rs2ovl29hw.png)
Консоль запросов: Сейчас нет поддержки при написании кода, но запросы работают. Для того чтобы запустить запрос, поставьте на него каретку и нажмите Ctrl/Cmd+Enter или кнопку Run на панели инструментов.
Если вы работаете в IDE с поддержкой JavaScript, запросы будут подсвечены. Подсветку в DataGrip добавим позже.
![](https://habrastorage.org/webt/qh/9m/g2/qh9mg2xbowuz8ifc7lxi-awawhs.png)
Отладчик PL/SQL для Oracle
Первая версия давно ожидаемого отладчика для Oracle. Сейчас он работает с процедурами, функциями, пакетами, триггерами и анонимными блоками.
Не забудьте, что объект должен быть скомпилирован для отладки. Чтобы это сделать, используйте контекстное меню: Database tools | Recompile.
![](https://habrastorage.org/webt/b1/5a/-w/b15a-w3udxubriker-wmfimulms.png)
Отметьте чекбокс With “debug”. Если процедура уже скомпилирована для отладки, на ее иконке есть зеленый жучок.
![](https://habrastorage.org/webt/29/m3/dh/29m3dhldylgc8vlgwyrruhshmte.png)
Чтобы запустить отладчик в консоли, нажмите кнопку Debug на панели инструментов.
![](https://habrastorage.org/webt/8t/8q/y-/8t8qy-gxcdqpbromu-afeaahae4.gif)
Подробности об отладчике — у нас в документации (на английском). Мнения, комментарии, пожелания пишите, пожалуйста, сюда.
Работа с исходниками
Сравнение кода процедур
Две процедуры можно сравнить, выделив их и нажав Ctrl/Cmd+D. Раньше сравнивались только сигнатуры, теперь — и исходники.
![](https://habrastorage.org/webt/tw/pq/3c/twpq3cmcvu74xpkrxcj86yx9_b0.png)
Трехпанельное слияние
Когда вы обновляете исходный код объекта, DataGrip предупреждает, если за это время код изменился в базе. Теперь для решения конфликтов вам предложат слияние при помощи трех панелей: слева вы увидите вашу версию, справа — то, что пришло из базы, а в середине — результат их слияния.
![](https://habrastorage.org/webt/is/6c/k4/is6ck4nht7irz_sxs9awkqdzhjg.png)
Чтобы быть уверенным, что вы не перепишете чужой код, проверьте, что настройка Warn if editing outdated DDL включена в свойствах источника данных.
Помощь в написании кода
В исходном коде объектов теперь работает помощь при написании кода. Например, можно раскрыть звездочку.
![](https://habrastorage.org/webt/uq/pl/cp/uqplcpy3-pvuhplsk5wjv_pjy3w.png)
Красивые исходники в PostgreSQL
Если настройка pretty-printed отключена, PostgreSQL отдает исходники с большим количеством избыточных скобок:
![](https://habrastorage.org/webt/tr/pr/q6/trprq6ukpittz41aof7j3eipte4.png)
Мы решили включить ее по умолчанию. В нашем примере скобок не осталось :)
![](https://habrastorage.org/webt/qs/mc/vj/qsmcvjobrlr7ghna8yys8mbwrwq.png)
Но обратим внимание на то, что PostgreSQL пишет в своей документации:
Код в формате pretty-printed лучше читается, но формат по умолчанию, скорее всего, будет лучше понят будущими версиями PostgreSQL. Поэтому мы советуем не использовать pretty-printed код для дампов.
The pretty-printed format is more readable, but the default format is more likely to be interpreted the same way by future versions of PostgreSQL; avoid using pretty-printed output for dump purposes.
Запуск запросов
Прогресс выполнения в редакторе
Пользователи жаловались, что не всегда понятно — запрос все еще выполняется или уже завершен. Мы добавили крутящуюся иконку на панель слева и таймер в текстовый редактор.
![](https://habrastorage.org/webt/ge/ov/a3/geova3nhpntc3cmv7rw-cqtuwqa.gif)
Флейм-чарт для планировщика
Это новый тип визуализации данных от планировщика. Чтобы открыть флейм-чарт (или флейм-граф, кому как нравится), нажмите кнопку слева:
![](https://habrastorage.org/webt/mj/fy/6x/mjfy6xnroo8q6bcudhzyv7woi8i.png)
Выглядит так:
![](https://habrastorage.org/webt/jz/bc/ly/jzbclyuoc6ul9rib3aimwlqa5o4.png)
Помощь в написании кода
Инспекции
DataGrip предупредит, если вы:
… используете оператор COALESCE без надобности: например, если первый аргумент никогда не бывает NULL. Вам предложат удалить ненужный код.
![](https://habrastorage.org/webt/vs/ya/so/vsyasocmkwij1bpdoc6kfzwq1fi.png)
… вставляете NULL в столбец, для которого это запрещено.
![](https://habrastorage.org/webt/7o/m-/ft/7om-ftdribo9pef2cjwexd0qyxc.png)
… не перечислили все столбцы в предложении INSERT.
![](https://habrastorage.org/webt/fg/lj/4b/fglj4bzwa59znp8pli1omqo1858.png)
… используете оператор «равно» для сравнения с NULL. Это сравнение ложно, потому что NULL это «неизвестно». Так как два значения, которые «неизвестны», сравнить нельзя, надо использовать специальный оператор IS NULL.
![](https://habrastorage.org/webt/hy/f0/xw/hyf0xwxmjj3k9hxhw2itc-ijrbo.png)
… используете предложение ORDER BY в подзапросе. Эта инспекция работает только в SQL Server.
![](https://habrastorage.org/webt/ux/o8/up/uxo8upgouwhequomduxldjtbaqc.png)
… используете одновременно TOP и OFFSET. Это тоже инспекция для SQL Server.
![](https://habrastorage.org/webt/ph/h2/r2/phh2r2r49am-nbedrd4gnnmpqik.png)
Конвертация конструкций
Сравнение с AND можно конвертировать в BETWEEN, и наоборот.
![](https://habrastorage.org/webt/fp/n9/eu/fpn9euhg-yvzyt2nf_3-44rofis.png)
JOIN ON можно конвертировать в JOIN USING, и наоборот.
![](https://habrastorage.org/webt/sp/6e/ab/sp6eabtcmbdywbua32n4guwvagg.png)
Текстовый редактор
Новое действие: сортировка строк по алфавиту. Может быть полезно при работе в CSV-файлами или поиске дубликатов в списке значений. Напоминаем, что вызывать любое действие можно по Ctrl/Cmd+Shift+A.
![](https://habrastorage.org/webt/c1/3g/qc/c13gqcy5orbbd25yfw_vvhczv3c.gif)
Сделали поиск по выделенному фрагменту кода. Сначала выделите область для поиска, потом нажмите Ctrl/Cmd+F. Если хотите искать по всему файлу выделенный фрагмент, нажмите сочетание клавиш еще раз.
![](https://habrastorage.org/webt/rn/xg/8l/rnxg8l-9neaimtweooqyg-x0tro.gif)
Фильтрация объектов
Если используете фильтр объектов для проводника, например такой:
![](https://habrastorage.org/webt/sc/7b/mv/sc7bmvdba5xisqd-yr74gr7puhu.png)
…то объекты, которые скрыты из проводника, будут считаться неизвестными для редактора кода. То есть мы предполагаем, что, если вы скрыли объекты из проводника, то и работать из SQL вы с ними не хотите.
![](https://habrastorage.org/webt/ck/ha/uu/ckhauugs5-8swkff86arwrg3hdy.png)
Генерация кода
В меню Generate, которое вызывается по Alt+Ins/Cmd+N, много новых объектов: материализованные представления, коллации, перечисления и не только.
![](https://habrastorage.org/webt/pc/bk/dg/pcbkdgghf2hhb4uar8nagtl6t-w.gif)
Редактор данных
Теперь, если в результате есть столбцы с одинаковыми именами, мы показываем, из какой таблицы они взяты. Это удобно еще и потому, что эти имена используются при экспорте: например, если вы создаете новую таблицу из результата, у вас не будет конфликта имен.
![](https://habrastorage.org/webt/kb/pm/g-/kbpmg-u1tsveqdlifvojxjzqu10.png)
Действие Modify Table работает из редактора данных. Например, если вы работаете с данными таблицы и решили добавить в нее столбец, теперь это сделать проще: нажмите Ctrl/Cmd+F6 и редактируйте таблицу.
![](https://habrastorage.org/webt/d4/an/hq/d4anhq2w87qzlezwddmmrp_rqzi.png)
И еще одна маленькая фича
Текст ошибки соединения можно погуглить, нажав на кнопку:
![](https://habrastorage.org/webt/so/hw/v1/sohwv1xgh1n56_6fomlby1az1-i.png)
На этом всё!
— Скачать триал на месяц
— Твитер, который мы читаем
— Почта, которую мы читаем: datagrip@jetbrains.com
Как всегда, ждем комментариев о том, что понравилось, и о самых важных для вас тикетах в Ютреке :)
Команда DataGrip